MySQL DQL 语言

MySQL DQL 语言

DQL(Data Query Language) :数据查询语言
重新整理笔记

基础查询

语法:

SELECT 查询列表
FROM 表名;

特点:

  1. 查询列表可以是:表中的字段(后面必须跟着 FROM 表名),常量值,表达式,函数。
  2. 查询的结果时一个虚拟的表格。
查询表中的单个字段:
SELECT last_name
FROM employees;

必须有 From …

查询表中多个字段:
SELECT last_name, salary, email
FROM employees;

查询列表使用 , 隔开,并且顺序随意。

查询表中所有字段:
SELECT *
FROM employees;
  1. 把所有字段罗列出来。
  2. 使用 ** 代表所有字段)。但是,使用 * 会使查询出的数据的顺序和表中的顺序一样,不够灵活。

注:

  1. 在做相关操作之前要先打开相应的库,所以每次执行操作直线应先写上 use 要操作的数据库;,如:use myem; 注意加分号 ;
  2. `em` ,使用 着重号` 将字段标识一下,用于区分字段还是关键字,如:关键字 NAME 和字段 name
查询常量值:
SELECT 100;
SELECT 'john';
100
100
john
john

SQL 中不区分字符和字符串,都看作是字符型,使用单引号 '
字符型和日期型的常量值必须使用单引号引起来,数值型不需要。
有什么作用?

查询表达式:
SELECT 100 % 98;
100 % 9
2
查询函数:
SELECT VERSION();
VERSION()
5.5.62

调用该方法 VERSION() 获得返回值,然后显示。
必须使用 SELECT 调用函数,必须有返回值。

对字段起 别名:

优点:

  1. 便于理解。如 SELECT 100 % 98; 执行后,列名就是 100 % 98 不方便理解。 这时,就可以起一个别名:
  2. 如果要查询的字段有重名的情况,使用别名可以区分开来。

方法一:使用 AS 关键字:

SELECT 100 % 98 AS 结果;
结果
2

方法二:省略 AS 关键字,用空格:

SELECT last_name 姓,first_name 名 
FROM employees;
K_ingSteven

特殊情况:
案例:查询 salary,显示结果为:out put

如果别名中有特殊符号,如:空格 # ,这时,建议将别名加上双引号 ",单引号 ' 也可以。

去重

案例:查询员工表中涉及到的所有的部门编号:

SELECT department_id 
FROM employees;

但这样会把表中所有的编号都打印出来,会出现很多重复编号。

使用关键字 DISTINCT 去重:

SELECT DISTINCT department_id 
FROM employees;

不允许 SELECT DISTINCT a, b FROM ...; 这样,a b 重复的数量不同。

+ 的作用

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

SELECT last_name + first_name  #wrong
AS 姓名
FROM employees;	
姓名
0
0

MySQL 中 + 仅有一个功能:运算符

代码
SELECT 100 + 90;两个操作数都为数值型,则做加法运算。
SELECT '123' + 90;其中一方为字符型,则试图将字符型值转换成数值型,如果转换成功,则继续做加法运算。
SELECT 'joh' + 90;其中一方为字符型,则试图将字符型值转换成数值型,如果转换失败,则将字符型值转换成 0
SELECT null + 10;只要其中一方为 null,则结果肯定为 null
拼接
CONCAT(字段名, 字段名, ...)

上题:

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

CONCAT 所拼接的字段中,如果有值为 null 的,结果也会为 null
所以要对可能为 null 的字段进行特殊判断。

IFNULL(expr1, expr2);
expr1要判断是否为 null 的字段名
expr2如果 expr1null 则返回 expr2
条件查询
SELECT 查询列表
FROM 表名
WHERE 筛选条件;

执行顺序:1.FROM 2.WHERE 3.SELECT

分类:

  1. 按条件表达式(使用条件运算符)筛选:
    条件运算符:> < = != <> <= >=
  2. 按逻辑表达式筛选:
    逻辑运算符:&& || !and or not
  3. 模糊查询:
    like between and in is null
按条件表达式筛选

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

SELECT *
FROM employees
WHERE salary > 12000;

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

SELECT last_name, department_id
FROM employees
WHERE department_id <> 90;

支持 != 但建议使用 <>

按逻辑表达式筛选

逻辑运算符的作用:连接条件表达式。

&&and两个条件都为 true,结果为 true ,否则为 false
||or只要有一个条件为 true,结果为 true,否则为 false
!not如果连接的条件本身为 false,结果为 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

WHERE NOT(department_id >= 90 AND department_id <= 110) OR salary > 15000

模糊查询
  1. LIKE
  1. 一般和通配符搭配使用,可以判断字符型数值或数值型。
  2. 要注意 LIKE 要匹配的字段值有没有 NULL 值。如:salary LIKE '%%' 如果 salary 字段有 NULL 值,会读取不出来。(有问题
字段 LIKE 要匹配的要求

字段为数值型,匹配三位的:sele LIKE '___';

通配符:

%任意多个字符,包括 0 个
_任意一个字符

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

SELECT *
FROM employees
WHERE last_name LIKE '%a%';

注:

  1. 字符一定要加 ''

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

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

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

这里的 _ 是一个普通的符号,而不是通配符了,所以需要进行一下转义:

  1. \_ :如:’__%’
  2. 使用 ESCAPE 表明这是一个转义,如 ESCAPE '$' 表明 $ 后的字符将是一个普通字符,所以使用的时侯要注意,将一个字符定义为转义字符后,这个字符将不能作为普通字符出现在当前语句中(需要 $$ 表明是一个 $),其他语句中可以。
SELECT last_name, salary
FROM employees
WHERE last_name LIKE '_aab%' ESCAPE 'a';
last_namesalary
Cabrio3000.00
  1. BETWEEN AND

salary BETWEEN 100 AND 200 等价于 salary >= 100 AND salary <= 200,所以,注:

  1. 包含所有临界值。
  2. 两个临界值有顺序关系,不能随意调换:
  3. NOT BETWEEN AND

案例1:查询工资再 10000 - 20000 之间的员工信息

SELECT *
FROM employees
WHERE salary BETWEEN 10000 AND 20000;
  1. IN

判断某字段的值是否属于 IN 列表中的某一项。

  1. IN 列表的值类型必须一致或兼容(可以隐性转换,如:'123'123
  2. IN 列表中不支持通配符,如:WHERE job_id IN( 'IT_%'); 因为此语句 等价于 WHERE job_id = 'IT_%' IN= 关系,所以不行。(LIKE 没有 LIKE( 'IT_%') 这种用法。)

案例1:查询员工的工种编号是 IT_PROG,AD_VP,AD_PRES 中的一个员工名和工种编号:

SELECT last_name, job_id
FROM employees
WHERE job_id IN ('IT_PROG', 'AD_VP', 'AD_PRES');
  1. IS NULL IS NOT NULL

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

SELECT last_name, commission_pct (错的)
FROM employees
WHERE commission_pct = NULL;

结果是空的,因为不能使用 = 判断一个值是否为 NULL ,要使用 IS NULL

SELECT last_name, commission_pct
FROM employees
WHERE commission_pct IS NULL;
#WHERE commission_pct IS NOT NULL;
  1. 安全等于 <=>

<=> 判断是否等于,等于返回 true
既可以判断 NULL 也可以判断普通数值。

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

MySQL DML 语言

DML(Data Manipulation Language): 数据操纵语言

MySQL DDL 语言

DDL(Data Definition Language):数据定义语言
关于库和表的定义,如:如何创建表,删除表,如何创建库,删除库。

MySQL TCL 语言

TCL(Transaction Control Language):事务控制语言

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值