MySQL-数据查询语言(DQL)
一、select命令:
SELECT [ALL | DISTINCT]{ * | table.* | [ table.field1 [ as alias1] [, table.field2[as alias2]][, …]] }
FROM table_name [ as table_ alias ]
[ left|out|inner join table_name2 ] #联合查询
[ WHERE … ] #指定结果需满足的条件
[ GROUP BY …] #指定结果按照哪几个字段来分组
[ HAVING …] #过滤分组的记录必须满足的次要条件
[ ORDER BY… ] #指定查询记录按一个或者多个条件排序
[ LIMIT { [ offset,] row_count | row_count OFFSET offset }] ; #指定查询的记录从哪条至哪条
[] 括号代表可选的;
{} 括号代表必须的;
# MySQL语句中的注释符,也可以用
1、查询所有字段:查询表中所有的数据列结果,采用“*”符号。
语法:select * from 表名;
例:select * from student;
2、查询指定字段:查询表中指定字段数据列结果,采用“字段名”。
语法:select 字段名1,字段名2,...,字段名n from 表名;
例:select studentno,studentname,address from student;
3、AS子句:
AS子句作用:
1)可给数据列(字段)取一个新别名
2)可给表取一个新别名
3)可把经计算或总结的结果用另外一个新名称来代替
AS子句用法
例:
1)字段取别名---显示清晰
select subjectno as "课程号",subjectname as "课程名" from subject;
2)给表取别名---方便引用
select * from student as s;
select s.subjectno from subject as s;
3)给表达式取别名---方便显示
select studentno,sturesult+10 "新成绩" from result;
注:AS 也可省略不写
4、DISTINCT关键字
作用:1.去掉SELECT查询返回的记录结果中重复的记录(所有返回列的值都相同),只返回一条。
语法:SELECT DISTINCT 字段名1, 字段名2... FROM 表名
例:
select distinct gradeName from grade;
注:ALL 关键字是默认的,返回所有的记录,与之相反。
5、JOIN联表查询
1)左外连接(LEFT JOIN):从左表(table_1)中返回所有的记录,即便在右(table_2)中没有匹配的行。
语法:
SELECT 字段1,字段2,… FROM table_1 LEFT JOIN table_2 ON table_1.字段x = table_2.字段y;
例:
select s.studentno,r.sturesult from student s left join result r
on s.studentno=r.studentno
2)右外连接(RIGHT JOIN):从右表(table_2)中返回所有的记录,即便在左(table_1)中没有匹配的行。
语法:
SELECT 字段1,字段2,… FROM table_1 RIGHT JOIN table_2 ON table_1.字段x = table_2.字段y;
例:
select s.studentno,r.sturesult from student s right join result r
on s.studentno=r.studentno
3)内连接 (INNER JOIN):在表中至少一个匹配时,则返回记录。
语法:
SELECT 字段1,字段2,… FROM table_1 INNER JOIN table_2 ON table_1.字段x = table_2.字段y;
例:
select studentname,sturesult from student inner join result
on student.studentno=result.studentno
注:
# INNER JOIN 与 JOIN 是相同的;
# 如table_1中的行在table_2中没有匹配,则不返回;
6、WHERE条件
WHERE条件用于检索数据表中符合条件的记录,搜索条件可由一个或多个逻辑表达式组成,结果一般为真或假。
1)逻辑操作符:
操作符名称 | 语法 | 描述 |
AND或&& | aANDb或a&&b | 逻辑与,同时为真结果才为真 |
OR或|| | aORb或a||b | 逻辑或,只要一个为真,则结果为真 |
NOT或! | NOTa或!a | 逻辑非,若操作数为假,结果则为真 |
2)比较操作符:
操作符名称 | 语法 | 描述 |
IS NULL | A IS NULL | 若操作符为NULL,则结果为真 |
IS NOT NULL | A IS NOT NULL | 若操作符不为NULL,则结果为真 |
BETWEEN | A BETWEEN b AND c | 若a范围在b与c之间则结果为真 |
LIKE | A LIKE b | SQL模糊匹配,若a匹配b,则结果为真 |
IN | A IN(a1,a2,a3,„.) | 若a等于a1,a2„中的某一个,则结果为真 |
注:
1、数值数据类型的记录之间才能进行算术运算;
2、相同数据类型的数据之间才能进行比较;
3)NULL空值条件查询:
NULL代表“无值”。
区别于零值0和空符串“ ”。
只能出现在定义允许为NULL的字段。
须使用 IS NULL 或 IS NOT NULL 比较操作符去比较。
4)BETWEEN范围查询:
根据一个范围值来检索
语法:
SELECT 字段1,字段2,… FROM 表名
WHERE 字段名 BETWEEN 值1 AND 值2
例:
select * from result
where sturesult between 60 and 70;
等同于
select * from result
where sturesult>=60 and sturesult<=70;
注:BETWEEN范围等同于 >= 和 <= 联合使用
5)IN范围查询
语法:SELECT 字段列1,字段2,… FROM 表名 WHERE 字段x IN ( 值1,值2,值3…)
例:
select * from student
where studentno in(1002,1004,1006);
等同于
select * from student
where studentno=1002 or studentno=1004 or studentno=1006;
注:
1. 查询的字段x的值,至少与括号中的一个值相同
2. 多个值之间用英文逗号隔开
6)LIKE模糊查询
语法:SELECT 字段列1,字段2,… FROM 表名 WHERE 字段x LIKE ‘%或_模糊匹配’;
例:
1.查询名字中第一个字是‘李’的同学的学生信息
select * from student
where studentname like '李%';
2.查询名字中第二个字是‘小’的同学的学生信息
select * from student
where studentname like '%小%';
3.查询最后一个字是‘峰’的同学的学生信息
select * from student
where studentname like '%峰';
4.查询姓‘李’且名字只有两个字的同学的学生信息
select * from student
where studentname like '李_';
5.查询年级名中带有‘三’的年级名,并且去重显示
select distinct gradename from grade
where gradename like '%三';
注:在WHERE子句中,使用LIKE关键字进行模糊查询,与“%”一起使用,表示匹配0或任意多个字符。与“_”一起使用,表示匹配单个字符。
7、GROUP BY分组
使用GROUP BY关键字对查询结果分组,对所有的数据进行分组统计,分组的依据字段可以有多个,并依次分组,与HAVING结合使用,进行分组后的数据筛选。
语法:
SELECT 字段列1,字段2,… FROM 表名
GROUP BY 字段x
HAVING 条件;
例:
select subjectno,count(*) from result
group by subjectno;
例:
select subjectno,avg(sturesult),max(sturesult),min(sturesult) from result
group by subjectno
having avg(sturesult)>=60;
8、ORDER BY排序
ORDER BY排序查询,对SELECT语句查询得到的结果,按某些字段进行排序与DESC(降序)或ASC(升序)搭配使用,默认为ASC(升序)
语法:
SELECT 字段列1,字段2,… FROM 表名
ORDER BY 字段x DESC(降序)或ASC(升序)
例:
升许
select * from result
order by sturesult
降序
select * from result
order by sturesult desc
9、LIMIT行数
LIMIT用于限制SELECT返回结果的行数
语法:
LIMIT [m,] n或LIMIT n OFFSET m
m 制定第一个返回记录行的偏移量
n 制定返回记录行的最大数目
例:
从第1行开始返回3行内容
select studentno,sturesult from result
order by sturesult desc
limit 3
从第4行开始返回3行内容
select studentno,sturesult from result
order by sturesult desc
limit 3 offset 3
注:
m不指定则偏移量为0,从第一条开始返回前n条记录
LIMIT 常用于分页显示