DQL语言使用总结
前言
该篇介绍了DQL语言的使用,DQL:数据库查询语言。关键字:SELECT … FROM … WHERE。
文章目录
1、基础查询
语法:select 查询的东西 from 表名;
- 查询的列表可以是:表中的字段、常量值、表达式、函数
- 查询的结果是一个虚拟的表格
- 查询前最好加上所使用的的库USE 库名;
- 用着重号来区分字段和关键字,加着重号的就是
字段
USE myemployees;
(1)查询表中的单个字段
SELECT last_name FROM employees;
(2)查询表中的多个字段
SELCET last_name,salary,email FROM employees;
(3)查询表中的所有字段
SELECT * FROM employees;
(4)查询常量值
SELECT 100;
SELECT 'Joln';
(5)查询表达式
SELECT 100*98;
(6)查询函数
SELECT VERSION();
(7)起别名:便于理解、易区分
#方式一
SELECT 100*98 AS 结果;
SELECT last_name AS 姓 ,first_name AS 名, FROM employees;
#方式二
SELECT last_name 姓 ,first_name 名, FROM employees;
#别名中有特殊符号则需要双引号
SELECT salary AS "out put" FROM employees;
(8)去重
#查询员工表中涉及到的所有的部门编号
SELECT DISTINCT department_id FROM employees;
(9)加号的作用:在mysql中只有运算符的作用
#两个操作数都为数值型,则做加法运算
SELECT 100+90;
#其中一方为字符型,则将其转换为数值型,转换成功继续做加法运算,转换失败则字符型值转换成0
SELECT '123'+90;
SELECT 'you'+90;
#只要一方为null,则结果肯定为null;
SELECT null+2;
(10)连接符号
SELECT CONCAT (last_name,frist_name) AS 姓名 FROM employees;
2、条件查询
语法:select 查询列表 from 表名 where 筛选条件
- 按条件表达式筛选:>、 < 、= 、<>、 >=、 <=
- 按逻辑表达式筛选:and、or、not
- 模糊查询:like、between and、in、is null
(1)按条件表达式查询
#查询工资>12000的员工信息
SELECT * FROM employees WHERE salary>12000;
#查询部门编号不等于90号的员工名和部门编号
SELECT last_name,department_id FROM employees WHERE department<>90;
(2)按逻辑表达式筛选:用于连接条件表达式
- and:两个条件都为true,结果为true,反之为false
- or:只要有一个条件为true,结果为true,反之为false
- not:如果连接的条件本身为false,结果为true,反之为false
#查询工资在10000-20000之间的员工名和工资以及奖金
SELECT last_name,salary,commission_pct
FROM employees
WHERE salary>=10000
AND salary<=20000;
#查询部门编号不是在90到100之间,或者工资高于15000的员工信息
SELECT * FROM employees
WHERE NOT(department_id>=90 AND department_id<=100) OR salary>15000;
(3)模糊查询——特殊的条件运算符
- like:与通配符搭配使用,如%任意多个字符(包含0个字符)、_ 任意单个字符
#查询员工名中包含字符a的员工信息
SELECT * FROM employee
WHERE last_name LIKE '%a%'; #字符串必须用单引号
#查询员工名中第三个字符为e,第五个字符为a的员工信息
SELECT * FROM employee
WHERE last_name LIKE '__e_a%';
#查询出员工名中第二个字符为_的员工名
SELECT * FROM employee
WHERE last_name LIKE '_\_%'; #\为转译符
#------------------------------------------
SELECT * FROM employee
WHERE last_name LIKE '_$_%' ESCAPE '$'; #指定某一字符为转译字符
- between and:包含临界值,临界值不能颠倒顺序
#查询员工编号在100-120之间的员工信息
SELECT * FROM employee
WHERE employee_id >= 100 AND employee_id <=120;
#--------------------------------------------------
SELECT * FROM employee
WHERE employee_id BETWEEN 100 AND 120;
- in:用于去判断某字段的值是否属于in列表中的某一项,使用in提高语句简洁度,in列表的值类型必须统一或者兼容,不可以用通配符
#查询员工的工种编号是a,b,c,d中的一个的员工名和工种编号
SELECT last_name,job_id
FROM employees
WHERE job_id=a or job_id=b or job_id=c or job_id=d;
#-----------------------------------------------------
SELECT last_name,job_id
FROM employees
WHERE job_id IN ('a','b','c','d');
- is null:=或<>不能用于判断null值,用is null和is not null来判断
#查询没有奖金的员工名和奖金率
SELECT last_name,commission_pct
FROM employees
WHERE commission_pct IS NULL;
#查询有奖金的
SELECT last_name,commission_pct
FROM employees
WHERE commission_pct IS NOT NULL;
- 安全等于 <=> :用的比较少,既可以判断null也可以判断普通数值
#查询没有奖金的员工名和奖金率
SELECT last_name,commission_pct
FROM employees
WHERE commission_pct <=> NULL;
#查询工资为12000的员工信息
SELECT * FROM employees WHERE salary <=> 12000;
- ifnull : 两个参数ifnull(a,123)表示如果a为null则转为123。
#查询员工号为176的员工的名字工号和年薪
SELECT last_name,
department_id,
salary*12*(1+ifnull(commssion_pct,0))
FROM employees
WHERE job_id=176;
案例面试题
试问 select * from employees; 和 select * from employees; where commission_pct like '%%' and last_name like '%%'结果是否一样?并说明原因
答:不一样!如果判断的字段有null则会不一样,因为奖金里有null值。
3、排序查询
语法:select 查询列表 from 表 where 筛选条件 order by 排序列表【asc/desc】
- asc代表升序,desc代表降序,默认升序
#查询员工信息,要求工资从高到低排序
SELECT * FROM employees ORDER BY salary DESC;
#查询部门编号>=90的员工信息,按入职时间的先后进行排序
SELECT * FROM employees
WHERE department_id>=90
ORDER BY hiredate ASC;