文章说明:作者之前跟着Mosh老师学习了MySQL,在这个过程中记了一些笔记,供大家参考。
第一章到第五章的内容,是作者一开始用word记的,其序号表示视频里的小节,但可能在缩进方面有些不准确,欢迎读者批评指正。在这部分内容学习之后的一段时间作者了解到了Markdown语法,大大便利了学习编程甚至课堂笔记的效率,在此给大家安利一下Markdown语法。
第一章 介绍
1. SQL or SQUEL
Structured English Query Language
2. MySQL
只是DBMS -- database management systems的一种,其他还有SQL Server等。
第二章 SELECT语句
3. select a database 选择数据库
USE sql_store 使用这一数据库
SELECT 后面加列,可用*代表所有的列
如果有很多语句,要用;终结每一行语句
From where order by 子句 clauses 加注释的话—语句的顺序不能改变
换行符 大间隔 和TAB 全都没有用 可以用到一行里 但东西多了就还是分到每一行里好
Select 后面对列可以用加减乘除操作,顺序和数学一样,还可以加小括号
AS 改为别名 别名中的间隔如果不用_而用空格需要用单引号引起来
SELECT DISTINCT 可以在选择列的时候去除掉列里的重复项
4. WHERE Clause WHERE子句
筛选数据 > >= < <= = != <>后两个都是不等于
日期可以用大小 WHERE birth_date > ‘1990-01-01’但是要加引号
左边的导航栏可以看到表格的每列标题,是一个结构图
5. AND, OR 和NOT运算符
SELECT *
FROM Customers
WHERE birth_date >'1990-01-01' OR (points > 1000 AND
state = 'VA')
-- AND 的运算优先级高于OR 这条命令加括号不加括号结果一样
SELECT *
FROM Customers
WHERE NOT (birth_date >'1990-01-01' OR points > 1000)
-- 这里的逻辑和数学里一样 非的概念
6. IN operator IN运算符
-- OR合并多个条件必须标明state = 'va' OR state ='ga' OR -- state= 'fa' 不能省略第二个state
-- WHERE state IN('VA', 'GA', 'FL')
-- 和以上效果一样,顺序不受限制
执行的快捷键为ctrl +shift+enter
执行单句的快捷键为ctrl+enter
7. BETWEEN operator BETWEEN运算符
SELECT *
FROM Customers
WHERE points >= 1000 AND points <= 3000
-- 可以换成 WHERE points BETWEEN 1000 AND 3000 是闭区间
-- BETWEEN不仅限于对数字的使用 也可以用日期
8. LIKE operator LIKE运算符
SELECT *
FROM Customers
WHERE last_name LIKE 'b%'
-- 获取B开头的last_name,%表示任意长度的字符,b是大小写无所谓,%可以放在开头结尾中间任何位置
-- _下划线代表单个字符,LIKE算是古早的运算符了,现在有了更强大的
SELECT *
FROM Customers
-- WHERE address LIKE '%TRAIL%' OR address LIKE 'AVENUE'
WHERE phone LIKE '%9'
-- 获取B开头的last_name,%表示任意长度的字符,b是大小写无所谓
-- 否定的时候是NOT LIKE
9. REGEXP operator 正则表达式
Short for regular expression 正则表达式
SELECT *
FROM Customers
WHERE last_name LIKE ‘%field%’
WHERE last_name REGEXP ‘field’ -- 这两行的意思一样
-- ^field 表示开头 即必须以field 开头
-- $表示结尾 field$
-- ‘field|mac’表示查找两个 相当于或
SELECT *
FROM Customers
-- WHERE last_name LIKE ‘%field%’
WHERE last_name REGEXP 'field|mac|rose'
WHERE last_name REGEXP 'field$|mac|rose'
WHERE last_name REGEXP '[gim]e'
-- 查找姓氏中带有ge ie 或me 的顾客 []代替单个字符
-- 方括号也可以放到后面e[ab]
-- [a-h]e 表示从a到h的任意字母 都包括在内 是闭区间
-- Exercises 练习
-- Get the customers whose
-- first names are ELKA or AMBUR
SELECT * FROM customers
-- WHERE first_name IN('ELKA', 'AMBUR')
-- last names end with EY or ON
-- WHERE last_name REGEXP 'EY$|ON$'
-- last names start with MY or contains SE
-- WHERE last_name REGEXP '^MY|SE'
-- last names contain B followed by R or U
WHERE last_name REGEXP 'B[RU]' – or ‘br|bu’
10. NULL operator 空运算符
SELECT *
FROM customers
WHERE phone IS NULL
-- WHERE phone IS NOT NULL
-- Exercises
-- get the orders that are not shipped
SELECT *
FROM orders
WHERE shipper_id IS NULL
11. ORDER BY clause 排序子句
为什么customer_id 是默认的排序依据
打开扳手小图标,进入设计模式 可以更改列,可以添加新列,删除现在有列 改名 改顺序
customer_id 前面有个黄色标志 意思是这是这张表的主键列
在关系型数据库中,每个表格都有一个主键列,这一列中的值要能够唯一识别表里的记录
SELECT *
FROM customers
ORDER BY first_name # 默认是升序,如果要降序就
ORDER BY first_name DESC # 为降序的缩写
# 给多列数据排序
ORDER BY state, first_name
# 如果你没选择这一列
SELECT first_name, last_name, 10 AS points
# 也可以
ORDER BY points
# 还可以
ORDER BY 1, 2 # 表示列的顺序 即第一列第二列
---
# Exercises
# 给了一张结果图让写代码
# 我的代码
SELECT *, quantity*unit_price AS total_price
FROM order_items
WHERE order_id = 2
ORDER BY total_price DESC
# Mosh 代码
SELECT *,
FROM order_items
WHERE order_id = 2
ORDER BY quantity*unit_price DESC
# 但他最后的代码跟我的一样
# 所以ORDER BY 后面加的不一定是列的名称,还可以是运算表达式
12. LIMIT clause 限制子句
SELECT *
FROM customers
LIMIT 3
# 得到前三行的数据,如果是300,即超过了总行数,则会显示所有数据
SELECT *
FROM customers
LIMIT 6, 3 -- 6被称为偏移量(offset),即跳过前六条记录获取三条记录 查询第三页的7-9
-- page 1 : 1-3
-- page 2 : 4-6
-- page 3 : 7-9
# 练习exercise
-- Get the top three loyal customers
-- 即拥有积分最多的顾客
SELECT *
FROM customers
ORDER BY points DESC
LIMIT 3 -- LIMIT clause永远放在最后,顺序错了会报错