MySQL入门篇

这篇博客详细介绍了MySQL数据库的入门知识,包括SQL语句、运算符、排序分页、多表查询、函数、聚合函数、子查询、表的创建与管理、数据类型、约束、视图和存储过程等内容。适合初学者系统学习MySQL。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

MySQL在面试和工作中非常重要,故在此整理学习MySQL时的知识点,作为一个学习笔记。

文中内容出自尚硅谷,链接:尚硅谷MySQL数据库教程天花板,mysql安装到mysql高级

非常感谢尚硅谷的视频教程!

目录

前言

一、SQL语句

二、运算符

1.比较运算符

2.安全等于运算符

3.非符号类型运算符

三、排序、分页

四、多表查询

1.笛卡尔积

2.内连接、外连接

3. union

4. SQL JOINS 

5. 99语法新特性

五、函数

1. 数值函数

2. 字符串函数

3. 时间函数

六、聚合函数

1. 聚合函数类型

2. count(*),count(1),count(column)区别

3. group by

4. having

5. sql执行原理

七、子查询

1. 什么是子查询

2.注意事项

3.子查询的分类

4. case中的子查询

5. 多行子查询

6. 自连接和子查询哪个好?

八、表的创建与管理

1. 数据存储的过程

2. 数据库、表、字段命名规范

3. 创建、管理数据库

4. 表

九、增删改

1. 插入

2. 更新

3. 删除

十、数据类型

1. MySQL中数据类型

2. char、varchar

3. float、double

4. 整数类型的区别

5. 浮点类型

6. 定点数类型

7. 日期时间类型

十一、约束

1. 什么是约束

2. 为什么需要约束

3. 约束的分类

4. 非空约束

5. 唯一约束

6. 主键约束

7. 自增约束

8. 外键约束

9. 默认约束

十二、视图

1. 什么是视图

2. 特点

3. 为什么要使用视图

4. 创建视图

5. 修改视图

6. 删除视图

7. 视图的优点

8. 视图的缺点

十三、储存过程、函数

1. 什么是存储过程?

2.存储过程的好处

3.与视图的区别

4. 创建存储过程

5. 调用存储过程

总结


一、SQL语句

1.基本sql语句

SELECT 字段1,字段2
FROM 表名
WHERE 过滤条件;

2.给列起别名

SELECT 字段1,字段2 "字段2的别名"
FROM 表名
WHERE 过滤条件;

3.去重

SELECT DISTINCT 字段1
FROM 表名;

4.空值参与运算

 books表:

bookID bookname discount price
1 go 1 50
2 mysql null 60
3 linux 0.8 70

  • 查询书本打折后的价格
#IFNULL(字段, 1) 如果字段不为空,则使用字段原有值;如果字段为空,则用1替换
SELECT bookname, price * IFNULL(discount,1) "cost"
FROM books;

5.显示表结构

DESC 表名;

二、运算符

1.比较运算符

比较运算符用来对表达式左边的操作数和游标的操作数进行比较,比较结果为真返回1,比较结果为假返回0,其他情况返回NULL。

比较运算符经常被用来作为select查询语句的条件来使用,返回符合条件的结果记录。

SELECT 0 = 'a' # 整数与字符串比较,mysql会将字符串转化为数字进行比较
FROM dual;


SELECT 'a' = 'b' # 字符串之间比较,其比较的是每个字符串中字符的ASCII编码是否相等
FROM dual;

2.安全等于运算符

安全等于运算符(<=>)与等于运算符作用相似,唯一的区别就是安全等于可以用来对NULL进行判断。使用安全等于运算符时,两边的操作数都为NULL时,返回的结果为1;当一个操作数为NULL时,其返回值为0。

SELECT NULL = NULL, NULL <=> NULL, 1 = NULL, 1 <=> NULL;

3.非符号类型运算符

运算符 作用
is null 判断值、字符串或者表达式是否为空
is not null 判断值、字符串或者表达式是否不为空
least 在多个值中返回最小值
greatest 在多个值中返回最大值
between...and... 判断一个值是否在两个值之间,包含边界值
isnull 判断值、字符串或者表达式是否为空
in 判断值是否为列表中任意的一个值
not in 判断一个值是否不是一个列表中的任意一个值
like 判断一个值是否符合模糊匹配规则
  • 查询books表discount不为空的数据
SELECT bookName 
FROM books 
WHERE discount IS NOT NULL;
  • 查询 book表中discount为空的数据
SELECT bookName 
FROM books 
WHERE discount IS NULL;
  • 查询books表中价格在50-70之间的书名
SELECT bookName, price 
FROM books 
WHERE price 
BETWEEN 50 AND 70;
  • 查询books表中书价为50,60的书本信息
SELECT bookName, price 
FROM books 
WHERE price IN (50,60);
  • 查询books表中包含字符 'i' 的书名
SELECT bookName 
FROM books 
WHERE bookName 
LIKE '%i%';
  • 查询books表中第三个字符是 'n' 的书名
SELECT bookName 
FROM books 
WHERE bookName
# _ 代表一个不确定的字符
LIKE '__n%';

三、排序、分页

使用limit的好处:约束返回结果的数量可以减少数据表的网络传输量,也可以提升查询效率。如果知道返回结果只有一条,就可以使用limit 1,告诉select语句只需要返回一条记录即可。好处是select不需要扫描完整的表,只需要检索到一条符合条件的记录即可返回。

limit后第一个参数表示开始的下标,第二个参数表示个数

注意:limit必须放在整个select语句的最后。

  • 排序分页的sql语句
SELECT 字段1,字段2
FROM 表名
WHERE 过滤条件
ORDER BT 字段 ASC/DESC
LIMIT (pageNum - 1) * pageSize, pageSize;
  • 查询书名按照价格降序排序
SELECT bookName, price 
FROM books 
ORDER BY price DESC;
  • 每页显示10条记录,显示第二页
SELECT bookName, price 
FROM books 
LIMIT 10,10;

四、多表查询

  • emp员工表
emp_id
first_name
last_name
email
phone
job_id
salary
commission_pct
manager_id
dept_id
  • dept部门表
dept_id
dept_name
manager_id
location_id
  • location位置表
location_id
street_address
postal_code
city
state_province
country_id

1.笛卡尔积

1.1 什么是笛卡尔积

多表查询的结果数为多个表中数据条目数的乘积,笛卡尔积会把第一张表的每一个值与第二张表的每一个值进行匹配。

1.2 什么情况下会出现笛卡尔积的错误

  1. 省略多个表的连接条件
  2. 连接条件无效
  3. 所有表中的所有行互相连接      

为避免笛卡尔积,可以在where加入有效的连接条件

SELECT table1.column, table2.column
FROM table1, table2
WHERE table1.column1 = table2.column2; #连接条件

2.内连接、外连接

内连接:合并具有同一列的两个以上的表的行,结果集中不包含一个表与另一个表不匹配的行。

SELECT 字段列表
FROM A表 INNER JOIN B表
ON 关联条件
WHERE 等其他子句;

外连接:两个表在连接过程中除了返回满足连接条件的行以外还返回左表或右表中不满足条件的行,这种连接也称为左外连接或右外连接。没有匹配的行时,结果表中对应的列为空。MySQL不支持sql92的外连接写法。

左外连接连接条件左表的表为主表,右边的表为从表;右外连接则相反。

外连接的分类:左外连接、右外连接、满外连接

  • 左外连接
SELECT e.last_name, e.dept_id, d.dept_name
FROM emp e
LEFT OUTER JOIN dept d
ON (e.dept_id = d.dept_id);
  • 右外连接
SELECT e.last_name, e.dept_id, d.dept_name
FROM emp e
RIGHT OUTER JOIN dept d
ON (e.dept_id = d.dept_id);

3. union

union和union all的区别:union会执行去重操作;union all不会执行去重操作。

4. SQL JOINS 

  • 内连接 A∩B
SELECT emp_id,last_name,dept_name
FROM emp a JOIN dept b
ON a.`dept_id` = b.`dept_id`;


  • 左外连接
SELECT emp_id,last_name,dept_name
FROM emp a LEFT JOIN dept b
ON a.`dept_id` = b.`dept_id`;


  •  右外连接
SELECT emp_id, last_name, dept_name
FROM emp a RIGHT JOIN dept b
ON a.`dept_id` = b.`dept_id`;

 


  •  A - A∩B
SELECT emp_id,last_name,dept_name
FROM emp a LEFT JOIN dept b
ON a.`dept_id` = b.`dept_id`
WHERE b.`dept_id` IS NULL;


  • B - A∩B
SELECT emp_id,last_name,dept_name
FROM emp a RIGHT JOIN dept b
ON a.`dept_id` = b.`dept_id`
WHERE a.`dept_id` IS NULL;


  • 满外连接
SELECT emp_id,last_name,dept_name
FROM emp a LEFT JOIN dept b
ON a.`dept_id` = b.`dept_id`
WHERE b.`dept_id` IS NULL
UNION ALL #没有去重操作,效率高
SELECT emp_id,last_name,dept_name
FROM emp a RIGHT JOIN dept b
ON a.`dept_id` = b.`dept_id`;

 


  • (A - A∩B)∪(B - A∩B)
SELECT emp_id,last_name,dept_name
FROM emp a LEFT JOIN dept b
ON a.`dept_id` = b.`dept_id`
WHERE b.`dept_id` IS NULL
UNION ALL
SELECT emp_id,last_name,dept_name
FROM emp a RIGHT JOIN dept b
ON a.`dept_id` = b.`dept_id`
WHERE a.`dept_id` IS NULL


5. 99语

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值