(1)MySQL——————基础,函数,分组查询,子查询,分页查询以及联合查询

1,SQL的基础

2,函数

3,分组查询

4,连接查询

5,子查询

6,分页查询

7,联合查询

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日'); ==20180606

在这里插入图片描述

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,数据类型,约束以及事务

发布了74 篇原创文章 · 获赞 21 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_41530004/article/details/105059754