DQL 操作
DQL 数据查询语言(重要)
数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。
查询返回的结果是一张虚拟表。
查询关键字:SELECT -- 查询:基于表中已经存在的数据,得到我们想要的数据
1基础查询:
SELECT 列名/字段名,..., FROM 表名 -- 查询指定列
SELECT*FROM 表名 -- *表示表中所有字段
id | char(6) | 学生学号 |
name | varchar(50) | 学生姓名 |
age | int | 学生年龄 |
gender | varchar(50) | 学生性别 |
CREATE TABLE stu( id char(6), name varchar(50), age int, gender varchar(50) );
|
INSERT INTO stu VALUES(‘1001‘,‘liuyi‘,25,‘male‘); INSERT INTO stu VALUES(‘1002‘,‘zhangsan‘,22,‘male‘); INSERT INTO stu VALUES(‘1003‘,‘lili‘,23,‘female‘); INSERT INTO stu VALUES(‘1004‘,‘zhaoliu‘,27,‘male‘); INSERT INTO stu VALUES(‘1005‘,‘sunqi‘,25,‘female‘); INSERT INTO stu VALUES(‘1006‘,‘zhouba‘,21,‘male‘); INSERT INTO stu VALUES(‘1007‘,‘wujing‘,25,‘female‘); INSERT INTO stu VALUES(‘1008‘,‘zhangtao‘,27,‘male‘); INSERT INTO stu VALUES(‘1009‘,‘zhaokai‘,29,‘male‘); |
2条件查询:
条件查询就是在查询时给出WHERE子句,在WHERE子句中可以使用如下运算符及关键字:
? =、!=、<>、<、<=、>、>=;
? BETWEEN...AND;
? IN(set); -- 查询一定范围内的记录 如: SELECT*FROM stu WHERE id IN(‘1001‘,‘1002‘,‘1003‘);
? IS NULL; --查询年龄为NULL(空)的记录,NULL不是一个值,不能用=符号; 正确示例如:
SELECT*FROM stu WHERE age IS NULL;
? AND;
? OR;
? NOT; -- 查询排除一定范围内的其他记录 如: SELECT*FROM stu WHERE id NOT IN(‘1001‘,‘1002‘,‘1003‘);
查询性别为女,并且年龄25岁以下的记录:
SELECT*FROM stu
WHERE gender = ‘fenmale‘ AND age<=25;
3模糊查询:
当想查询姓名中包含a字母的学生时就需要使用模糊查询了。模糊查询需要使用关键字LIKE。
通配符:
_ 任意一个字母 ‘张_‘ -- 姓张,名字为两个字的所有人
% 任意0~n个字母 ‘张%‘ -- 姓张的所有人
SELECT*FROM stu
WHERE NAME LIKE ‘____i‘; -- 名字由5个字母构成,并且第五个字母必须为i的人
4字段控制查询:
4.1去除重复记录
去除重复记录(两行或两行以上的记录中的数据都相同),例如,在员工表emp中,sal字段就存在相同的记录。当只查询emp表的sal字段时,那么会出现重复记录,想去除重复记录,需要使用DISTINCT。
SELECT DISTINCT sal FROM emp;
SELECT DISTINCT 字段1,字段2 FROM emp; -- 滤除所指定的两个字段都重复的多余字段
4.2查看雇员的月薪与奖金之和
因为sal和comm两列的类型都是数值类型,所以可以做加运算。如果sal或comm中有一个字段不是数值类型的,那么会出错。任何类型的数据和NULL相加都是NULL。
SELECT sal+comm FROM emp;
SELECT sal+IFNULL(comm,0) FROM emp;
-- 如果comm为NULL,利用IFNULL()函数将comm赋0后再相加
SELECT name,sal+IFNULL(comm,0) AS 总工资 FROM emp;
-- 将求和后显示出的字段重命名为“总工资”,并与对应的姓名一起显示。AS可以省略。
SELECT name 姓名,sal+IFNULL(comm,0) 总工资 FROM emp;
-- 同时给name一栏也个起别名
5排序查询:
5.1 查询所有学生记录,按年龄升序排列
SELECT*
FROM stu
ORDER BY age ASC;
或者
SELECT*
FROM stu
ORDER BY age; -- 默认升序排序
5.2 查询所有学生记录,按年龄降序排列
SELECT*
FROM stu
ORDER BY age DESC , id ASC; -- 主要条件和次要条件