DQL数据查询语言
一.基本的SELECT语句
操作前:1.首先导入一些表进去作为练习的表,点击某个用户下的一个数据库,选一个数据库库里的的表,右键点击运行SQL文件,导入要做练习操作的表.
2.再去该库里新建一个查询,来输入你要操作的代码
1.查询所有列
星号(*):表示全部的意思。
// 查询表t_mysql_employees中的所有的列
SELECT * FROM t_mysql_employees;
查询表中的哪些列
//查询表t_mysql_employees中的 employee_id列,first_name列以及last_name列
SELECT employee_id,first_name,last_name FROM t_mysql_employees;
2.查询特定列
//查找mysql数据库里的user表,然后查找user表里的host列,user列以及authentication_string列.
select * from user;
SELECT host,user,authentication_string from user;
3.列的别名
// 找到所有t_mysql_employees表里的employee_id列,first_name列别名为fn,last_name别名为ln,且限制条件 first_name要为lex.
SELECT * from (SELECT employee_id,first_name as fn,last_name as ln FROM t_mysql_employees) t where t.fn = 'lex'
使用列的别名的时候:
1、两个有相同的列段的时候;就是第一个表有这个列,第二个表又有相同名字的列,为了区分,可以使用别名.
2、后续要使用这个列段的时候;就是之后方便书写,可以使用别名,取个短点儿的名.
4.字符串(配合字符串函数使用)
//从t_mysql_employees表里选择出 first_name,last_name列.
SELECT first_name,last_name FROM t_mysql_employees;
结果如下
//从t_mysql_employees表里选择出 first_name,last_name列将他们拼接起来.
SELECT concat(first_name,last_name) FROM t_mysql_employees;
// 1+2
SELECT 1+2;
//null+4.
SELECT null+4;
5.显示表结构
//显示出表t_mysql_employees的结构.
desc t_mysql_employees;
6.MySQL的版本查询
//MySQL的版本查询
select version();
7.去重
// 选中t_mysql_employees表里的 departemnet_id列.
SELECT departemnet_id FROM t_mysql_employees;
//选中t_mysql_employees表里的 departemnet_id列进行去重
SELECT DISTINCT department_id FROM t_mysql_employees;
//选中t_mysql_employees表里的 departemnet_id列和employee_id列和进行去重.
SELECT DISTINCT department_id,employee_id FROM t_mysql_employees;
但是呢,因为表格的显示都是矩形的,没有的都会进行补齐也就不存在对少的那一列进行去重了
二.过滤及排序
1.语法
select
查询列表
from
表名
where
筛选条件;
select * from 表名 where 条件(Boolean表达式);
// t_mysql_employees 表里 (薪资)salary 大于12000
SELECT
*
FROM
t_mysql_employees
WHERE
salary > 12000;
2.分类
(1)按条件表达式筛选
简单条件运算符:
0.>
1.<
2. =
3. !=
4.<>
5. >=
6.<=
//查询部门编号不等于90号的员工名和部门编号
//选中 t_mysql_employees 表 中的 last_name, department_id 列中 depar
SELECT
last_name,
department_id
FROM
t_mysql_employees
WHERE
department_id <> 90;
(2)按逻辑表达式筛选
逻辑运算符:
&& || !
and or not
作用:用于连接条件表达式
&&和and:两个条件都为true,结果为true,反之为false
||或or: 只要有一个条件为true,结果为true,反之为false
!或not: 如果连接的条件本身为false,结果为true,反之为false
//查询工资z在10000到20000之间的员工名、工资以及奖金
SELECT
last_name,
salary,
commission_pct
FROM
t_mysql_employees
WHERE
salary >= 10000
AND salary <= 20000;
// 查询部门编号不是在90到110之间,或者工资高于15000的员工信息
SELECT
*
FROM
t_mysql_employees
WHERE
NOT(department_id>=90 AND department_id<=110) OR salary>15000;
也可以这样
SELECT
*
FROM
t_mysql_employees
WHERE
( department_id < 90 OR department_id > 110 )
OR salary > 15000;
(3)模糊筛选
like
between and
in
is null|is not null
<1>like
特点:一般和通配符搭配使用
通配符:
% 任意多个字符,包含0个字符
_ 任意单个字符
//查询员工名中包含字符a的员工信息
select
*
from
t_mysql_employees
where
last_name like '%A%';
//查询员工名中第三个字符为e,第五个字符为a的员工名和工资
select
last_name,
salary
FROM
t_mysql_employees
WHERE
last_name LIKE '__n_l%';
原本_代表了任意一个字符,需求是让_就代表下划线,那么意味着_需要转义,那如何转义呢?
在特殊字符加任意字符,后面用ESCAPE修饰这一字符即可
//查询员工名中第二个字符为_的员工名
SELECT
last_name
FROM
t_mysql_employees
WHERE
last_name LIKE '_^_%' ESCAPE '^';
<2>between and
①使用between and 可以提高语句的简洁度
②包含临界值
③两个临界值不要调换顺序
//查询员工编号在100到120之间的员工信息
SELECT
*
FROM
t_mysql_employees
WHERE
employee_id BETWEEN 100 AND 120;
<3>in
含义:判断某字段的值是否属于in列表中的某一项
特点:
①使用in提高语句简洁度
②in列表的值类型必须一致或兼容
③in列表中不支持通配符
//查询员工的工种编号是 IT_PROG、AD_VP、AD_PRES中的一个员工名和工种编号
SELECT
last_name,
job_id
FROM
t_mysql_employees
WHERE
job_id IN( 'IT_PROT' ,'AD_VP','AD_PRES');
<4>is null
=或<>不能用于判断null值
is null或is not null 可以判断null值
//查询没有奖金的员工名和奖金率
SELECT
last_name,
commission_pct
FROM
t_mysql_employees
WHERE
commission_pct <=> NULL;
安全等于 <=>
//查询工资为12000的员工信息
SELECT
last_name,
commission_pct
FROM
t_mysql_employees
WHERE
salary<=>12000;
(4)排序查询
语法:
select 查询列表
from 表名
【where 筛选条件】
order by 排序的字段或表达式;
order by 列名 DESC/ASC
特点:
1、asc代表的是升序,可以省略
desc代表的是降序
2、order by子句可以支持 单个字段、别名、表达式、函数、多个字段
3、order by子句在查询语句的最后面,除了limit子句
<1>按单个字段排序
// 按照工资进行升序
SELECT
*
FROM
t_mysql_employees
order by salary asc;
<2>按筛选条件再排序
<3>按表达式排序
<4>按姓名排序
//每个月工资*12*(如果有奖金率就算上没有就为0) 然后这一整块儿叫年薪
SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 年薪
FROM t_mysql_employees
ORDER BY 年薪 ASC;
<5>按函数排序
<6>按多个字段排序
三.分组查询
1、概念
分组函数作用于一组数据,并对一组数据返回一个值。
2、功能:用作统计使用,又称为聚合函数或统计函数或组函数
分类:
sum 求和、avg 平均值、max 最大值 、min 最小值 、count 计算个数
特点:
<1>sum、avg一般用于处理数值型
max、min、count可以处理任何类型
<2>以上分组函数都忽略null值
<3>可以和distinct搭配实现去重的运算
<4>count函数的单独介绍
一般使用count(*)用作统计行数
<5>和分组函数一同查询的字段要求是group by后的字段
#id的总和数
select count(*) from t_mysql_employees;
#最大工资
select max(salary) from t_mysql_employees;
#最小工资
select min(salary) from t_mysql_employees;
#平均工资
select avg(salary) from t_mysql_employees;