结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
SQL语言分类
DQL语言
(Data Query Language)数据查询语言,主要用于查询功能
DML语言
(Data Manipulation Language)数据操作语言,主要用于增加,删除与修改
DDL语言
(Data Define Language)数据定义语言,有关库和表的定义
TCL语言
(Transaction Control Language)事务控制语言,事务和事务处理
DQL语言-数据查询语言
DQL基础查询语句–SELECT
# DQL基础查询语句
/*
语法:
SELECT 查询列表 FROM 表名;
FROM可省
特点:
1. 查询列表可以是:表中的字段,常量,表达式,函数
2. 查询的结果是一个虚拟表格
*/
# 选中指定库
USE myemployees;
# 查询表中的单个字段
SELECT last_name FROM employees;
# 查询表中的多个字段,中间用逗号隔开,对顺序无要求
SELECT last_name,first_name,email FROM employees;
# 查询所有字段
SELECT * FROM employees;
# `列名`,注意可以用反单引号标注列名(不是单引号!),主要是避免列名和关键字相同的情况
SELECT
`salary`
FROM
employees;
# 查询常量值
SELECT 100;
SELECT 'Steven';
# 查询表达式
SELECT 98*10;
# 查询函数
SELECT VERSION();
# 起别名,类似定义变量名
/*
* 1. 便于理解
* 2. 如果查询字段有重复情况,使用别名可以便于区分
*/
# 方式1 使用AS关键字
SELECT 100*5 AS result;
SELECT last_name AS 姓,first_name AS 名 FROM employees;
# 方式2 使用空格,别名中有特殊空格就加上双引号避免歧义
SELECT last_name 姓,first_name 名 FROM employees;
# 去重 利用DISTINCT关键字
SELECT DISTINCT department_id FROM employees;
# +号的作用
/*
* 在sql语言中+号只有一个功能就是作为运算符,不具备连接两个字段的能力
* 两个操作数都为数值型可以用来作运算
* 其中一方为字符型,首先会试图将字符型转换为数值型,转换成功继续运算,转换失败,则将字符型转换为0
* 如果一方为null,则结果必为null
*/
# 加入想要拼接两个字段,需要采用concat()方法
SELECT CONCAT(last_name,' ',first_name) AS 姓名 FROM employees;
DQL条件查询语句
# DQL条件查询语句
/*
语法:
SELECT
查询列表
FROM
表名
WHERE
筛选条件
注意:
这里语句的执行顺序与我们直观上的书写顺序并不一致
在上面的语句中首先执行FROM语句获取读取的表
然后执行WHERE语句,确定筛选的条件,最后才执行SELECT语句进行查询
分类:
1. 利用条件表达式筛选:基本的条件运算符有>,<,=,!=,<>,>=,<= (!=和<>是等价的,但推荐采用<>表示不等)
2. 按逻辑表达式查询:逻辑运算符有: &&,||,!,AND,OR,NOT (推荐采用后三种)
3. 模糊查询:关键词有:LIKE,BETWEEN AND,IN,IS NULL
*/
# 按条件表达式进行筛选
# 筛选工资大于12000的人
SELECT
*
FROM
employees
WHERE
salary>12000;
# 查询部门编号不等于90号的员工姓名和部门编号
SELECT
CONCAT(first_name,' ',last_name) 姓名,department_id 部门编号
FROM
employees
WHERE
department_id<>90;
# 按逻辑表达式筛选
# 查询工资再10000-20000之间的员工部分信息
SELECT
first_name,
last_name,
salary,
commission_pct
FROM
employees
WHERE
salary > 10000 AND salary < 20000;
# 查询工资高于15000,或者部门编号不为90的员工
SELECT
last_name,
salary,
department_id
FROM
employees
WHERE
salary>15000 OR department_id<>90;
# 模糊查询
/*
like:和通配符搭配使用
通配符包括:
%:任意多个字符,包含0个字符
_:任意单个字符
*/
SELECT
last_name,
salary
FROM
employees
WHERE
last_name LIKE '_o__h%';
#假设要查询的内容中包含通配符,可以用转义字符解释内容,或用转义关键字
SELECT
last_name,
job_id,
salary
FROM
employees
WHERE
job_id LIKE '__\_%';
SELECT
last_name,
job_id,
salary
FROM
employees
WHERE
job_id LIKE '__$_%' ESCAPE '$';
/*
BETWEEN AND
在。。。之间
使用BETWEEN AND可以提高语句简介程度
搜索结果包含两个端点值
两个临界值顺序不可以颠倒
BETWEEN AND实际等价于a<=X<=b,所以顺序不可颠倒
*/
#查询员工号在100-120之间
SELECT
*
FROM
employees
WHERE
employee_id BETWEEN 100 AND 120;
/*
IN 关键字
判断某字段的值是否属于in列表中的某一项
使用in提高语句整洁度
in列表中的值必须是同一类型或相互兼容
in列表中不支持通配符
IN实际等价于X=a OR X=b or X=c,但是通配符在like关键字下使用
所以IN列表中不允许出现通配符
*/
SELECT
last_name,
job_id
FROM
employees
WHERE
job_id IN('IT_PROG','AD_VP','AD_PRES');
/*
IS NULL关键字 (IS NOT NULL)
判断是否为NULL值
(在SQL语言中=号或者<>不能判断是否为NULL值)
*/
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct IS NULL;
/*
安全等与 <=>
安全等于可以用来判断NULL值,也可以用来判断普通类型的值
缺点是可读性较低
*/
SELECT
last_name,
commission_pct,
job_id
FROM
employees
WHERE
job_id <=> 'SA_REP' OR commission_pct <=> NULL;
DQL排序查询语句
# DQL排序查询语句
/*
语法:(【】表示可省)
SELECT
查询列表
FROM
表名
【WHERE 筛选条件】
ORDER BY
排序列表 【asc|desc】
特点:
ASC代表升序,DESC代表降序。不写的情况下默认升序
ORDER BY字句一般放在整个查询语句的最后(LIMIT字句除外)
*/
# 工资由高到低排序
SELECT
*
FROM
employees
ORDER BY
salary DESC;
# 由低到高
SELECT * FROM employees ORDER BY salary ASC;
# 排序+筛选 查询部门编号>=90的员工信息,按入职时间的先后进行排序
SELECT
last_name,
department_id,
hiredate
FROM
employees
WHERE
department_id >= 90
ORDER BY
hiredate;
# 按表达式排序 年薪降序
SELECT
last_name,
salary*12*(1+IFNULL(commission_pct,0)) 年薪
FROM
employees
ORDER BY
salary*12*(1+IFNULL(commission_pct,0)) DESC ;
# 用别名排序
SELECT
last_name,
salary*12*(1+IFNULL(commission_pct,0)) 年薪
FROM
employees
ORDER BY
年薪 DESC ;
# 用函数排序
SELECT
last_name,
salary,
LENGTH(last_name) AS 长度
FROM
employees
ORDER BY
LENGTH(last_name) ;
# 按多个字段排序
# 先按工资升序,再按员工编号降序
SELECT
last_name,
salary,
employee_id
FROM
employees
ORDER BY
salary ASC,
employee_id DESC;