MySQL入门 初学者详细笔记

第一章

本篇笔记仅为本人在观看CodeWithMosh的10小时sql学习视频中自学所记。
特此感谢b站up主:伟大的海伦君 的搬运以及翻译。

第二章

1.选择语句

SELECT * --选择全部语句,顺序影响
SELECT column 1, column 2 --以列为主
FROM customers --table

SELECT DISTINCT column 
--distinct 自动删去该列中的重复项
SELECT price, price * 1.1 AS 'new price'
--用AS关键字为列重命名
--用单引号或者双引号写字符串

2.WHERE
写Boolean语句,判断是否符合条件,筛选

SELECT * 
FROM orders
WHERE order_date >= '2019-01-01'
--‘xxxx-xx-xx’是sql的日期书写格式,可以用作判断大小
WHERE Order_id = 6 AND price * quantity >30
--还有NOT, OR等判断符号,NOT优先级最高,OR优先级最低
WHERE state IN ('VA','GA','FL')
--IN判断是否在合集里(NOT IN)
WHERE points BETWEEN 1000 AND 3000
--判断points是否【1000,3000】注意是闭区间
WHERE name LIKE 'b____y'
--不区分大小写
--中间几个下划线代表特定数量的字符
WHERE name LIKE '%b%'
--%代表不限数量的字符
--即名字中有b即符合条件


--正则表达式Regular expression
WHERE name REGEXP 'b'
--判断是否有b
--'^b'句首,'b$'句尾
WHERE name REGEXP 'a|b'
--'|'代表或
--'[gim]e'判断e前缀是否有gim中任一字符
--'e[gim]'判断e后缀是否有gim中任一字符
--'[a-h]e'是否有a到h(闭区间)任一字符
WHERE phone IS NULL
--判断是否为空
--IS NOT NULL

3.ORDER BY语句
排序方式
默认排序:根据主键列,且为从小到大(升序)

ORDER BY name DESC
--DESC 降序排列 descending
ORDER BY state DESC, name
--先降序排序 state, 再根据name升序排序
--可以不select 但是order by某些column

4.LIMIT
限制查询返回的记录数。

SELECT *
FROM tables
LIMIT 3
--不超过3行
--limit 300 若小于这个数字则返回所有
--常用于分页
--选择第三页的话
LIMIT 6,3
--跳过前6条,选择3条,即返回第7,8,9
--LIMIT通常语句排序在最后

第三章:连接

1.内连接
从多张表格里选取列。
JOIN
两种类型:内连接,外连接
INNER JOIN。

SELECT *
FROM orders 
--FROM orders o
--别名,直接空格加简称,方便书写
JOIN customers
	ON orders.customers_id = customers.customers_id
--两张表格单纯连接在一起

SELECT order_id, name, orders.customers_id
--选取不重复的列
--选取重复名列时需要前缀表格名称

2.跨数据库连接
双击设置主数据库。query一般用于当前主数据库。

--navigator 导航
USE sql_store;
--设置当前主数据库或者导航界面双击

SELECT *
FROM orders o
JOIN sql_inventory.products p
--直接将另一个数据库的名字作为table前缀
	ON o.product_id = p.product_id

3.自连接
同一张表格自连接

USE sql_hr

SELECT 
	e.employee_id,
	e.name,
	m.name
FROM employees e
JOIN employees m AS manager --'manager'也一样
	ON e.reports_to = m.employee_id
	

4.多表连接

USE sql_store;

SELECT 
	o.id,
	o.date,
	c.name,
	os.status
FROM orders o 
JOIN customers c
	ON o.id = c.id
JOIN order_statuses os
	ON o.status = os.id

5.复合连接条件
复合主键

SELECT oi
JOIN oin
	ON oi.id = oin.id
	AND oi.pid = oin.pid

6.隐式连接

SELECT *
FROM o, c
WHERE o.id = c.id
--一般不用

7.外连接
OUTER JOIN
INNER JOIN只返回符合ON 条件的语句
但是如果想要返回无论是否有订单的顾客,则需要外连接
分左右两种

SELECT 
	c.id,
	c.name,
	o.id
FROM c
LEFT JOIN o
--返回所有from语句中的table的记录
--RIGHT JOIN 返回右表
--类似交集,left返回A∪(A∩B),right相反
--JOIN返回A∩B
	ON c.id = o.id
--8.多表格连接
--LEFT JOIN another table
--为了方便理解一般都用LEFT JOIN
ORDER BY c.id

9.自外连接

USE sql_hr;

SELECT 
	e.id,
	e.name,
	m.name AS manager
FROM employees e
LEFT JOIN employees m
	ON e.reports_to = m.first_name

10.USING
如果两个table中有列的名称完全一样

SELECT 
	c.id,
	c.name,
	o.id
FROM c
LEFT JOIN o
	--ON c.id = o.id
	USING(customer_id)
JOIN shippers sh
	USING(Shipper_id,product_id)
	--多个列比较时用逗号分隔

11.自然连接(用的很少)

SELECT 
	o.id,
	c.name
FROM orders o
NATURAL JOIN customers c

12.交叉连接

SELECT 
	c.name AS customers
	p.product AS product
FROM customers c
CROSS JOIN products p
--显示连接
--隐式:FROM c, o
--order by c.name

13.联合Unions

SELECT 
	o.id,
	o.date,
	'Active' AS 'status'
FROM orders
WHERE order_date>'2019-01-01';

UNION
--合并多段查询记录
SELECT 
	o.id,
	o.date,
	'Archived' AS 'status'
FROM orders
WHERE order_date < '2019-01-01';

第四章

1.列属性
Datatype
INT 整数类型
CHAR(50) 字符类型 (填满50个字符)
VARCHAR(50) variable character 不填满也不会浪费空间
DATE XXXX-XX-XX 日期

PK primary key 主键(唯一识别)
NN Not NULL 不允许空值
AI Auto increment 自动递增 通常用作主键列
Default value 默认值

2.插入单行 Inserting a single row
INSERT INTO

INSERT INTO customers
VALUES(
	DEFAULT,--主键必须是唯一值
	'John',
	'Smith',
	NULL,
	DEFAULT,
	'add',
	'CA',
	200)
--完整赋值

--如果只想赋值某些列,而其他列就默认
INSERT INTO customers(
	name,
	address,
	city)
	--以这个顺序为准
VALUES(
	'John',
	'add',
	'CA',)

3.插入多行 Inserting multiple rows

INSERT INTO shippers (name)
VALUES ('shipper1'),
	('shipper2'),
	('shipeer3')
--逗号分割,且每一个新行的元素都要用括号括起来

4.插入分级行(子母级)(往多张表里插入数据)

INSERT INTO orders(customer_id,order_date,stauts)
VALUES (1,'2019-01-02',1);

--内置函数 LAST_INSERT_ID()
--返回mysql最新生成的id

INSERT INTO order_items
VALUES(LAST_INSERT_ID(),1,1,2.95),
	(LAST_INSERT_ID(),2,1,2.45),
	(LAST_INSERT_ID(),3,1,2.35);

5.创建表复制

CREATE TABLE new _table AS
SELECT *
FROM orders
--会忽略一些属性,比如主键设置和自动递增
--这个select是子查询
--部分属于另外一段SQL语句的选择语句

右键table-Truncate Table,删除表中所有行
-drop table,删除表

--将选择语句作为insert的子查询
INSERT INTO new_table
SELECT *
FROM orders
WHERE order_date < '2019-01-01'

6.更新单行 update
7.更新多行

UPDATE table1
SET payment = DEFAULT, 
	date = '2020-01-01', 
	name = NULL,
	price = total *0.5
WHERE id = 1
--WHERE id IN(3,4)
--在table内点击刷新

8.update子查询

WHERE id = 
			(SELECT id
			FROM clients
			WHERE name = 'aaa')
WHERE id IN 
			(SELECT id
			FROM clients
			WHERE name IN (
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值