使用SELECT语句可以在需要时从数据库中快捷方便地检索、统计或者输出数据。
SELECT [ALL | DISTINCT |DISTINCTROW] <目标表达式1>[,<目标表达式2>]...
[WHERE<条件表达式>]
[GROUP BY <列名1> [HAVING <条件表达式>]]
[ORDER BY <列名2> [ASC | DESC]]
[LIMIT [m,]n];
DISTINCT 或者 DISTINCTROW 会消除结果集中的重复行。
单标查询是指仅涉及一个表的查询。
SELECT 目标表达式1, 目标表达式2,.....
FROM 表名;
SELECT classNo. department, className FROM tb_class;
查询所有字段:
SELECT * FROM tb_student;
定义字段别名
字段名 [AS] 字段别名
选择指定记录
SELECT 目标表达式1
FROM 表名
WHERE 查询条件;
具体举例
SELECT courseName, credit, courseHour
FROM tb_course
WHERE courseHour>=48;
SELECT courseName, credit, courseHour
FROM tb_course
WHERE NOT courseHour<48;
SELECT courseName, credit, birthday
FROM tb_course
WHERE birthday BETWEEN '1997-01-01' AND '1997-12-31';
SELECT *
FROM tb_student
WHERE native IN('北京','天津','上海');
使用带LIKE关键字的字符串匹配查询
MySQL所支持的常用通配符有两种: % _。其子女和代表人已长度在字符串 甚至包括长度为零的字符。后者代表任意单个字符。
SELECT *
FROM tb_student
WHERE studentNo LIKE '2013110201';
WHERE studentName LIKE '王%';
MySQL中使用关键字REGEXP指定正则表达式的字符匹配模式
[NOT][REGEXP | RLIKE]<正则表达式>
选项 | 说明 | 例子 | 匹配值实例 |
---|---|---|---|
<字符串> | 匹配包括指定字符串的文本 | ‘fa’ | fan, afa, faad |
[ ] | 匹配[]中任何一个字符 | ‘[ab]’ | bay, big, app |
[ ^ ] | 匹配不在[]中的任何一个字符 | ‘[^ab]’ | desk, cool, six |
^ | 匹配文本的开始字符 | ‘^b’ | bed, bridge, book |
$ | 匹配文本的结尾字符 | ‘er$’ | driver, woker, farmer |
. | 匹配任意单个字符 | ‘b.t’ | better, bit, bite |
* | 匹配0个或者多个*前面指定字符 | ‘f*n’ | fn, fan, begin |
+ | 匹配+前面的字符1次或者多次 | ‘ba+’ | bat, baa, battle, bala |
{n} | 匹配前民的字符至少n次 | ‘b{2}’ | bb, bbbb, bbbbbbb |
SELECT *
FROM tb_course
WHERE courseName REGEXP '系统';
WHERE courseName LIKE '%系统%';
WHERE priorCourse IS NULL;
WHERE pirorCourse IS NOT NULL;
WHERE credit>=3 AND courseHour>32;
WHERE native='北京' OR native='上海';
对查询结果排序
ORDER BY studentName;
ORDER BY studentNo, score DESC;
限制偏移量
LIMIT [位置偏移量, ] 行数
SELECT studentNo, courseNo, score
FROM tb_score
ORDER BY score DESC
LIMIT 2,3;
聚合函数是MySQL提供的一类系统内置函数,常用语对一组值进行计算,然后返回单个值。
例如
SELECT COUNT(*) FROM tb_student;
SELECT COUNT(DISTINCT studentNo) FROM tb_student;
SELECT AVG(score) FROM tb_score
WHERE courseNo='21001';
交叉连接又称笛卡尔积,把一张表的每一行与另一张表的每一行连接起来。
SELECT * FROM tb_student CROSS JOIN tb_score;
SELECT * FROM tb_student, tb_score;
内连接通过在查询中设置连接条件来移除交叉连接查询结果集中某些数据行。
SELECT tb_student.*, tb_score.*
FROM tb_student, tb_score
WHERE tbstudent.studentNo= tb_score.studentNo;
SELECT tb_student.*, tb_score.*
FROM tb_student INNER JOIN tb_score
ON tb_student.studentNo = tb_score.studentNo;
自然连接
SELECT a.studentNo, studentName, courseNo, score
FROM tb_student a NATURAL JOIN tb_score b;
外连接
左外连接: LEFT OUTER JOIN 或者 LEFT JOIN,
右外连接: RIGHT OUTER JOIN 或 RIGHT JOIN。
SELECT studentNo, studentName FROM tb_Student
WHERE classNo=
(SELECT classNo FROM tb_class
WHERE className='计算机14-1班')
UNION将多个SELECT语句的结果组成一个结果集合。