SQL学习笔记系列(二) DQL语言的学习

DQL语言的学习


打开脚本

-root@localhost-右键-执行SQL脚本-执行-完成-手动刷新

进阶1:基础查询

语法:

SELECT 要查询的东西
【FROM 表名】;

类似于Java中 :System.out.println(要打印的东西);

特点:

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

查询单个字段

如:SELECT last_name FROM employees;

查询表中的多个字段

如SELECT last_name FROM employees,email FROM employees;#逗号隔开,可以不考虑顺序

查询表中所有字段

  1. 可在左边的菜单上双击选择后再用逗号隔开
  2. F12可格式化
  3. *代表所有字段(但顺序会与原表一致)

查询时的细节

  1. 建议每次都先加 “USE 库名”;
  2. 用着重号·来区分关键字和字段
  3. 选中执行/F9

查询常量值

查询某个常量值时不需要来自(from)哪个表

查询表达式

表达式:如select 188*90;

查询函数

函数:如select VERSION();

起别名

  1. 如SELECT 100%98 AS 结果;
  2. 或者 SELECT 100%98 (空格) 结果;

去重

加上 DISTINCT

SEKECT DISTINCT department_id FROM employees;

+号的作用

mysql中的+号仅仅只有一个功能:运算符。

  1. 如select 100+90;
  2. 如select “123”+90 #其中一方为字符型,试图将字符型转换成数值型,如果转换成功,则继续做加法运算,如果转换失败,则将字符型数值转换成0。
  3. 如select null+0;只要其中一方为null,则结果肯定为null.

利用contact函数实现拼接

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

 SELECT CONCAT('a','b','c') AS 姓名

IFNULL()

IFNULL(commission_pact,0)AS 奖金率

进阶2:条件查询

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

语法

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

1.条件表达式

	示例:salary>10000
	条件运算符:
	> < >= <= = != <>
	#'<>'是不等于的意思

#案例1:查询工资>12000的员工信息
SELECT * 
FROM employees
WHERE salary>12000;

#案例2:查询部门编号不等于90号的员工名和部门编号
SELECT last_name,department_id
FROM employees
WHERE department_id!=90;

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

2.逻辑表达式

示例:salary>10000 && salary<20000

逻辑运算符:

	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的员工信息
SLECT *
FROM employees
WHERE department_id<90 or department_id >110 or salary>15000;

或者:
SLECT *
FROM employees
WHERE NOT(department_id>=90 AND department_id <=110) OR salary>15000;

3.模糊查询

like 
between and 
in 
is null/is not null

(1)like

特点

(1)一般和通配符搭配
通配符:
% 任意多个字符(包含0个字符)
_任意单个字符

#案例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 '_\_%';#或者last_name LIKE '_$_%'ESCAPE '$';

(2)between and

特点

i. 提高语句简洁度
ii. 包含临界值
iii. 两个临界值不能调换顺序

#案例1:查询员工编号在100到120之间的员工信息
SELECT
    *
FROM
    employees
WHERE
    employee_id BETWEEN 100 AND 120;

(3)in

含义

判断某字段的值是否属于in列表中的某项目

特点

i. 使用in提高语句简洁度
ii. in列表的值类型必须一致或兼容
iii. 不支持通配符

#案例:查询员工的工种的编号是 IT_PROT、AD_VP、AD_PRES中的一个员工名和工种编号
SELECT 
    last_name,
    job_id
FROM
    employees
WHERE
    job_id IN ('IT_PROT','AD_VP','AD_PRES');

(4)is null

特点

i. =或<>不能用于判断null值
ii. is null或is not null 可以判断null值

#案例1:查询没有奖金的员工名和奖金率
SELECT
    last_name,
    commision_pct
FROM
    employees
WHERE
    commision_pct IS NULL;

#案例2:查询有奖金的员工名和奖金率
SELECT
    last_name,
    commision_pct
FROM
    employees
WHERE
    commision_pct IS NOT NULL;

(5)安全等于 <=>

 #案例1:查询没有奖金的员工名和奖金率
SELECT
   last_name,
    commision_pct
FROM
    employees
WHERE
    commision_pct <=> NULL;
 
 #案例2:查询工资为12000的员工信息
 SELECT
    last_name
    salary
FROM
    employees
WHERE
    salary <=> 12000;

进阶3:排序查询

语法

select
	要查询的东西
from
	表
where 
	筛选条件

order by 排序的字段|表达式|函数|别名 【asc|desc】#升序或降序


#案例1:查询员工信息,要求工资从高到低排序
SELECT *
FROM employees
ORDER BY salary DESC;
#ORDER BY salary ASC;为从低到高

#案例2:查询部门编号>=90的员工信息,按入职时间的先后进行排序(添加筛选条件)
SELECT *
FROM employees
WHERE department_id >=90
ORDER BY hiredate ASC;

#案例3:按年薪的高低显示员工的信息和年薪(按表达式排序)
SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 年薪
FROM employees
ORDER BY salarysalary*12*(1+IFNULL(commission_pct,0)) DESC;

#案例4:按年薪的高低显示员工的信息和年薪(按别名排序)
SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 年薪
FROM employees
ORDER BY 年薪 DESC;

#案例5:按姓名的长度显示员工的姓名和工资(按函数排序)
SELECT LENGTH(last_name) 字节长度,last_name,salary
FROM employees
ORDER BY LENGTH(last_name) DESC;
#这里换成字节长度也是可以的,如
ORDER BY 字节长度 DESC;

#案例6:查询员工信息,要求先按工资排序,再按员工编号排序
SELECT *
FROM employees
ORDER BY salary ASC,employee_id DESC #不可以ORDER BY两次

特点

  1. asc代表升序,desc代表减序,如果不写,默认升序
  2. order by 子句中可以支持单个字段、多个字段、表达式、函数、别名
  3. order by 子句一般是放在查询语句的最后面,但limit子句除外。
原文地址:https://www.cnblogs.com/HLBBLOG/p/14210343.html