SQL的基础
1,数据库的好处:
- 实现数据持久化
- 使用完整的管理系统统一管理,易于查询
2,数据库的概念:
- DB
数据库( database ):存储数据的“仓库”。它保存了一系列有组织的数据。 - DBMS
数据库管理系统( Database Management System )。数据库是通过 DBMS 创建和操作的容器 - SQL
结构化查询语言( Structure Query Language ):专门用来与数据库通信的语言。
3,启动和停止服务SQL:
- 方式一:通过计算机管理方式
右击计算机—管理—服务—启动或停止MySQL服务 - 方式二:通过命令行方式(以管理员方式启动)
启动:net start mysql服务名
停止:net stop mysql服务名
4,MySQL服务的登录和退出
- 方式一:通过mysql自带的客户端,只限于root用户
- 方式二:通过Windows自带的客户端只限于登录:mysql [-h 主机名 -P 端口号] -u用户名 -p密码
- 退出:exit或ctrl+c
5,MySQL常用的命令:
- 查看 mysql 中有哪些个数据库: show databases;
- 使用一个数据库: use 数据库名称;
- 查看指定的数据库中有哪些数据表: show tables;
- 查看表的结构:desc 表名
- 查看其它库的所有表:show tables from 库名
- 查看服务器版本:
方式一:登录到mysql服务器 select version();
方式二:没有登录到mysql服务端 mysql --version 或 mysql --V
6,mysql中select语句:
- mysql中加号的作用
①,只要其中的一方为字符型,试图将字符型数值转换成数值型
select '123'+90; ==》213
②,如果转换成功,则做加法运算,如果转换失败,则将字符型数组转换成0
select 'Tommey周'+90; ==》90
③,只要其中一方为null,则结果肯定为null
select null+90; ==》null
- 拼接函数应使用 concat(‘a’,‘b’)
- 安全等于<=>:既可以判断NULL值,又可以判断普通的数值,可读性较低
- is null:仅仅可以判断null值,可读性较高
函数
1,字符函数:
- 大小写控制函数
select lower('SQL'); ==》sql
select upper('sql'); ==》SQL
- 字符控制函数
select CONCAT('Hello', 'Tommey周'); ==》HelloTommey周
select SUBSTR('HelloWorld',1,5); ==》Hello
select LENGTH('HelloTommey周'); ==》14
select INSTR('HelloWorld', 'W'); ==》6
select LPAD('Tommey周',10,'*'); ==》***Tommey周
select RPAD('Tommey周', 10, '*'); ==》Tommey周***
select TRIM('H' FROM 'HelloWorld'); ==》elloWorld
select REPLACE('abcd','b','m'); ==》amcd
2,数字函数:
- ROUND(四舍五入):
select ROUND(45.926, 2); ==》 45.93
- CEIL(向上取整,返回大于等于该参数的最小整数):
select CEIL(45.12); ==》 46
- FLOOR(向下取整,返回小于等于该参数的最大整数):
select FLOOR (45.9); ==》 45
- TRUNCATE(截断):
select TRUNCATE(45.926, 2); ==》 45.92
- MOD(求余):
select MOD(1600, 300); ==》 100
3,日期函数:
- now(获取当前日期+时间) :
select now(); ==》2020-03-25 22:41:03
- CURDATE(获取当前日期) :
select CURDATE(); ==》2020-03-25
- CURTIME(获取当前时间) :
select CURTIME(); ==》22:46:05
- str_to_date(将日期格式的字符转换成指定格式的日期):
select STR_TO_DATE('9-13-1999','%m-%d-%Y'); ==》 1999-09-13
- date_format(将日期转换成字符):
select DATE_FORMAT('2018/6/6','%Y年%m月%d日'); ==》 2018年06月06日
4,流程控制函数:
- if 函数: if else的效果
select if(10 < 5,'我比你小','我比你大'); ==》 我比你大
- case函数的使用:switch case的效果
SELECT last_name,job_id,salary,CASE job_id
WHEN 'IT_PROG' THEN 1.10 * salary
WHEN 'ST_CLERK' THEN 1.15 * salary
WHEN 'SA_REP' THEN 1.20 * salary
ELSE salary
END "REVISED_SALARY"
FROM employees;
5,分组函数:
- AVG() 平均值
- COUNT() 计算个数
select count(distinct real_name) from t_employee;
- MAX() 最大值
- MIN()最小值
- SUM() 求和
- 可以对 数值型数据使用AVG 和 SUM 函数
- 可以对 任意数据类型的数据使用 MIN 和 MAX 函数
- COUNT(*) 返回表中记录总数,适用于 任意数据类型
- count(*) ,count(1),count(字段)那个效率高?
MYISAM存储引擎下,count(*)的效率高
INNODB 存储引擎下,它会使用最小的二级索引来进行 count 的查询优化,count(*)和count(1)的效率差不多,比count(字段)效率高,字段的话是需要判断是否为空
分组查询
- group by
select count(*),location_id from departments group by location_id having count(*)>2
- 分组前筛选 group by子句的前面 WHERE
- 分组后筛选 group by子句的后面 HAVING
- 分组函数做条件肯定是放在having子句中
- 能用分组前筛选的,就优先考虑使用分组前筛选
连接查询
1,笛卡尔集:
select name,boyName from beauty,boys;
-
笛卡尔集会在下面条件下产生:
– 省略连接条件
– 连接条件无效
– 所有表中的所有行互相连接 -
为了避免笛卡尔集, 可以在 WHERE 加入有效的连接条件。
2,内连接:
SELECT <select_list> FROM A INNER JOIN B ON A. KEY = B. KEY
- 特点:
添加排序,分组筛选
inner可以省略
筛选条件放在where后面,连接条件放在on后面,提高分离性,便于阅读
inner join连接和sql92语法中的等值连接效果是一样的,都是查询多表的交集
3,外连接:
- 应用场景:用于查询一个表中有,另外一个表没有的记录
- 左外连接
SELECT <select_list> FROM A LEFT JOIN B ON A.key=B.key
- 右外连接
SELECT <select_list> FROM A RIGHT JOIN B ON A.key=B.key
- 全外
full outer join
内连接 + 左外 + 右外
- 交叉连接 ‘
cross join
就是笛卡尔乘积
- 全连接
SELECT <select_list> FROM A FULL JOIN B ON A.key=B.key
子查询
-
注意事项
- 子查询要包含在括号内。
- 将子查询放在比较条件的右侧。
- 单行操作符对应单行子查询,多行操作符对应多行子查询。
-
子查询中的 HAVING 子句
- 首先执行子查询。
- 向主查询中的HAVING 子句返回结果
-
单行子查询比较操作符
-
多行子查询比较操作符
-
exists(完整的查询语句)结果1或0
select * from t_employee where exists(select * from t_employee t where t.real_name='T_ommey')
分页查询
- 特点:
- limit语句放在查询语句最后
- 公式((page-1)*size,size) ===》page页数 size每页显示的条数
联合查询
-
union:合并、联合,将多次查询结果合并成一个结果
-
语法
查询语句1
union 【all】
查询语句2
union 【all】 -
意义
将一条比较复杂的查询语句拆分成多条语句
适用于查询多个表的时候,查询的列基本是一致 -
特点
要求多条查询语句的查询列数必须一致
要求多条查询语句的查询的各列类型、顺序最好一致
union 去重,union all包含重复项
下一章,(2)MySQL——————DML,DDL,数据类型,约束以及事务
转载:https://blog.csdn.net/qq_41530004/article/details/105059754
查看评论