DQL语言(查询)
简单基础查询
#建议语法格式
SELECT
属性及条件
FROM
表名;
以下为方便集中显示,避免占行太多,未进行语法格式化
PS:如果使用的为navicat工具,可在新建查询中,选择美化SQL进行语法格式化(SQL命令界面无法进行美化操作)。
#1、模糊查询表中所有内容
#语法
select * from 表;
#例
select * from zp;
#2、查询表中的单个字段
#语法
select 字段名 from 表;
#例
select name from zp;
#3、查询多个字段
#语法
select 字段名1,字段名2 from 表;
#例
select name,id from zp;
#4、查询表达式
#语法
select 表达式;
#例
select 100%99;
#5、查询函数
#语法
select 函数名;
#例
select version();
#6、起别名
#语法
select 属性 as 别名;
#例
select last_name as 姓,first_name as 名 from employees;
#7、去重
#关键字distinct
#例
select distinct department_id from employees;
#8、拼接查询
#语法
select concat(’a’.’b’) as 姓名 from employees; #a与b为字段,employees为表,姓名为新表的名字,返回的结果
#例
select concat(last_name,first_name) as 姓名 from employees;
#9、去null值
#例(如果其中一个为null,则此行字段均为null,使用ifnull,可以拟定返回结果)
select
ifnull(commission_pct,0) as 奖金率,commission_pct
from
employees;
条件查询
语法
select
查询列表
from
表名
where
筛选条件;
按条件表达式筛选
/*条件表达式
> < = != <> >= <=
*/
#例1(查询工资大于12000的员工)
select
*
from
employees
where
salary>12000;
#例2(查询部门编号大于90的员工)
select
last_name,
department_id
from
employees
where
department_id >=90;
按逻辑表达式筛选
/*逻辑表达式
&& || !
and or not
&&和and:两个条件均为true,结果为true,反之则为false
||或or:只要有一个条件为true,结果为true,反之则为false
*/
#例1(查询工资在10000-20000之间的员工姓名、工资及奖金)
SELECT
last_name,
salary,
commission_pct
FROM
employees
WHERE
salary >=10000
AND
salary <=20000;
#例2(查询部门编号不是在90到110之间的,或者工资高于15000的员工信息)
SELECT
*
FROM
employees
WHERE
department_id < 90 OR department_id > 110 OR salary >= 15000;
#同
SELECT
*
FROM
employees
WHERE
NOT(department_id >= 90 AND department_id <= 110) OR salary >= 15000;
模糊查询
/*逻辑表达式
like
between and
in
is null
*/
#1、like
-- 例:查询员工名中包含字符a的员工信息(%为通配符)
SELECT
*
FROM
employees
WHERE
last_name LIKE '%a%';
-- 例:查询员工名中第三个字母为n,第5个字母为l的员工信息
SELECT
last_name,
salary
FROM
employees
WHERE
last_name LIKE '__n_l%';
-- 同(其中a为替换值,并不唯一)
SELECT
last_name
FROM
employees
WHERE
last_name LIKE '_a_%' ESCAPE "a";
#2、between and(between and包含临界值即取等号)
-- 例:查询员工编号在100到120之间的员工信息
SELECT
*
FROM
employees
WHERE
employee_id >= 100 AND employee_id <=120;
-- 同
SELECT
*
FROM
employees
WHERE
employee_id BETWEEN 100 AND 120;
#3、in
-- 例:查询员工的工种编号是IT_PROG,AD_VP,AD_PRES中的一个员工名和员工种编号
SELECT
last_name,
job_id
FROM
employees
WHERE
job_id = "IT_PROG" OR job_id = "AD_VP" OR job_id = "AD_PRES";
-- 同
SELECT
last_name,
job_id
FROM
employees
WHERE
job_id IN ("IT_PROG" , "AD_VP" , "AD_PRES");
#3、is 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;
#4、安全等于<=>
-- 例:查询工资为12000的员工信息
SELECT
last_name,
salary
FROM
employees
WHERE
salary <=> 12000;
is null :仅仅只能判断null值,可读性较高
<=> :即可以判断null值,又可以判断普通的数值,可读性较低
排序查询
语法
select
查询列表
from
表名
where
筛选条件
order by 排序列表 asc|desc;#asc表示升序,desc表示降序
排序查询
-- 1、案例:查询员工信息,要求工资从高到低排序
SELECT
*
FROM
employees
ORDER BY
salary DESC;
-- 2、案例:查询部门编号大于等于90的员工信息,按入职先后时间进行排序
SELECT
*
FROM
employees
WHERE
department_id >= 90
ORDER BY
hiredate DESC;
-- 3、案例:按年薪的高低显示员工的信息年薪(按表达式排序)
SELECT
*,salary*12*(1+IFNULL(commission_pct,0)) AS 年薪
FROM
employees
ORDER BY
salary*12*(1+IFNULL(commission_pct,0)) DESC;
-- 4、案例:按年薪的高低显示员工的信息年薪(按别名排序)
SELECT
*,salary*12*(1+IFNULL(commission_pct,0)) AS 年薪
FROM
employees
ORDER BY
年薪 DESC;
-- 5、案例:按姓名的长度显示员工的姓名和工资(按函数排序)
SELECT
LENGTH(last_name) AS 字节长度,last_name,salary
FROM
employees
ORDER BY
LENGTH(last_name) DESC;
-- 6、案例:查询员工信息,要求先按工资排序,再按员工编号排序(按多个字段排序)
SELECT
*
FROM
employees
ORDER BY
salary ASC,employee_id DESC;
PS:以上回顾为尚硅谷mysql视频所得,数据库资源为以下脚本导入,后续有关DQL语言持续更新!
链接:https://pan.baidu.com/s/1phXCZ7eaMiuwNjCaHXnwXg
提取码:dq98