MySQL学习(二)——DQL(数据查询语言)语言的学习

进阶1:基础查询

语法:SELECT 要查询的东西【FROM 表名】; ,类似于Java中 :System.out.println(要打印的东西);

特点:

  1. 通过select查询完的结果 ,是一个虚拟的表格,不是真实存在
  2. 要查询的东西 可以是常量值、可以是表达式、可以是字段、可以是函数

示例:

  1. 查询单个字段 select 字段名 from 表名;
  2. 查询多个字段 select 字段名,字段名 from 表名;
  3. 查询所有字段 select * from 表名
  4. 查询常量 select 常量值;
    注意:字符型和日期型的常量值必须用单引号引起来,数值型不需要
  5. 查询函数 select 函数名(实参列表);
  6. 查询表达式 select 100/1234;
  7. 起别名 as 或者 空格
  8. 去重 select distinct 字段名 from 表名;
  9. +
    作用:做加法运算
    select 数值+数值; 直接运算
    select 字符+数值;先试 图将字符转换成数值,如果转换成功,则继续运算;否则转换成0,再做运算
    select null+值;结果都为null
  10. 【补充】concat函数:拼接字符 select concat(字符1,字符2,字符3,...);
  11. 【补充】ifnull函数:判断某字段或表达式是否为null,如果为null 返回指定的值,否则返回原本的值 select ifnull(commission_pct,0) from employees;
  12. 【补充】isnull函数:判断某字段或表达式是否为null,如果是,则返回1,否则返回0 select isnull(commission_pct) from employees;

案例: 查询员工名和姓连接成一个字段,并显示为 姓名

SELECT CONCAT('a','b','c') AS 结果;

SELECT 
	CONCAT(last_name,first_name) AS 姓名
FROM
	employees;

进阶2:条件查询

条件查询: 根据条件过滤原始表的数据,查询到想要的数据
语法:

select 
    要查询的字段|表达式|常量值|函数
from 
    表
where 
    条件 ;

分类:

  1. 条件表达式
    条件运算符: >、 < 、>=、 <= 、=、 !=、 <>,<=>

#####案例1:查询工资>12000的员工信息

SELECT 
	*
FROM
	employees
WHERE
	salary>12000;

#####案例2:查询部门编号不等于90号的员工名和部门编号

SELECT 
	last_name,
	department_id
FROM
	employees
WHERE
	department_id<>90;
  1. 逻辑表达式
    逻辑运算符:
    and(&&):两个条件如果同时成立,结果为true,否则为false
    or(||):两个条件只要有一个成立,结果为true,否则为false
    not(!):如果条件成立,则not后为false,否则为true

#####案例1:查询工资z在10000到20000之间的员工名、工资以及奖金

SELECT
	last_name,
	salary,
	commission_pct
FROM
	employees
WHERE
	salary>=10000 AND salary<=20000;

#####案例2:查询部门编号不是在90到110之间,或者工资高于15000的员工信息

SELECT
	*
FROM
	employees
WHERE
	NOT(department_id>=90 AND  department_id<=110) OR salary>15000;
  1. 模糊查询
    like:一般搭配通配符使用,可以判断字符型或数值型。通配符:%任意多个字符,_任意单个字符
    between and:包含边界,两个临界值不要调换顺序
    in:判断某字段的值是否属于in列表中的某一项,注意:使用in提高语句简洁度;in列表的值类型必须一致或兼容;in列表中不支持通配符
    is null /is not null:用于判断null值,但是=或<>不能用于判断null值

#####案例1:查询员工名中包含字符a的员工信息

select 
	*
from
	employees
where
	last_name like '%a%';  

#####案例2:查询员工名中第三个字符为e,第五个字符为a的员工名和工资

select
	last_name,
	salary
FROM
	employees
WHERE
	last_name LIKE '__e_a%';

#####案例3:查询员工名中第二个字符为_的员工名

SELECT
	last_name
FROM
	employees
WHERE
	last_name LIKE '_$_%' ESCAPE '$';   #ESCAPE '$'表示 '$'后面的是转义字符

#####案例4:查询员工编号在100到120之间的员工信息

SELECT
	*
FROM
	employees
WHERE
	employee_id >= 120 AND employee_id<=100;
#----------------------
SELECT
	*
FROM
	employees
WHERE
	employee_id BETWEEN 120 AND 100;

#####案例5:查询员工的工种编号是 IT_PROG或者AD_VP或者AD_PRES的员工名和工种编号

SELECT
	last_name,
	job_id
FROM
	employees
WHERE
	job_id = 'IT_PROT' OR job_id = 'AD_VP' OR JOB_ID ='AD_PRES';

#------------------

SELECT
	last_name,
	job_id
FROM
	employees
WHERE
	job_id IN( 'IT_PROT' ,'AD_VP','AD_PRES');

#####案例6:查询没有奖金的员工名和奖金率

SELECT
	last_name,
	commission_pct
FROM
	employees
WHERE
	commission_pct IS NULL;

#####案例7:查询有奖金的员工名和奖金率

SELECT
	last_name,
	commission_pct
FROM
	employees
WHERE
	commission_pct IS NOT NULL;

安全等于 <=>

####案例1:查询没有奖金的员工名和奖金率

SELECT
	last_name,
	commission_pct
FROM
	employees
WHERE
	commission_pct <=>NULL;

#####案例2:查询工资为12000的员工信息

SELECT
	last_name,
	salary
FROM
	employees

WHERE 
	salary <=> 12000;

is null 和 <=>比较
IS NULL:仅仅可以判断NULL值,可读性较高,建议使用
<=> :既可以判断NULL值,又可以判断普通的数值,可读性较低

进阶3 排序查询

语法:

select
    要查询的东西
from
    表
where 
    条件
order by 排序的字段|表达式|函数|别名 【asc|desc】

特点:

  1. asc :升序,如果不写默认升序;desc:降序
  2. 排序列表 支持 单个字段、多个字段、函数、表达式、别名
  3. order by的位置一般放在查询语句的最后(除limit语句之外)

例子:

#1、按单个字段排序
#案例:查询员工信息 按工资降序

SELECT * FROM employees ORDER BY salary DESC;

#2、添加筛选条件再排序
#案例:查询部门编号>=90的员工信息,并按员工编号降序

SELECT *
FROM employees
WHERE department_id>=90
ORDER BY employee_id DESC;

#3、按表达式排序
#案例:查询员工信息 按年薪降序

SELECT *,salary*12*(1+IFNULL(commission_pct,0))
FROM employees
ORDER BY salary*12*(1+IFNULL(commission_pct,0)) DESC;

#4、按别名排序
#案例:查询员工信息 按年薪升序

SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 年薪
FROM employees
ORDER BY 年薪 ASC;

#5、按函数排序
#案例:查询员工名,并且按名字的长度降序

SELECT LENGTH(last_name),last_name 
FROM employees
ORDER BY LENGTH(last_name) DESC;

#6、按多个字段排序
#案例:查询员工信息,要求先按工资降序,再按employee_id升序

SELECT *
FROM employees
ORDER BY salary DESC,employee_id ASC;

你可能感兴趣的:(数据库)