MySQL课程笔记---第一章:基本语句

主讲老师:Mosh;教程链接:【【中字】SQL进阶教程 | 史上最易懂SQL教程!10小时零基础成长SQL大师!!-哔哩哔哩】 https://b23.tv/MqVRzdk 

-- 以下为课程笔记,每一段单个运行是不出错的
-- 第一章:基础语句

USE sql_store; -- 加分号,因为和后面不是同一句,不能写在同一行

SELECT *
FROM customers -- 从customer中调取所有列
WHERE customer_id = 1 -- 筛选满足cuetomer id 为1的
ORDER BY first_name -- 用名排序

SELECT 
	first_name, -- 换行后按Tab键,格式更清晰
	last_name,
    points,
    points+10 AS discount_factor -- 可以直接在调取的时候进行简单数据处理:加减乘除,并另赋名
FROM customers
 
SELECT DISTINCT state -- 此处的distinct用于导出不含重复项的state列
FROM customers

SELECT  -- 练习题
	name,
    unit_price, -- 记得列的名称中间要加上符号
    unit_price*1.1 AS new_price
FROM products

SELECT * -- 练习题
FROM order_items 
WHERE order_id = 6 AND quantity * unit_price > 30

SELECT *
FROM customers
WHERE points > 3000 -- 不等号:!=或<>
WHERE state = 'VA' -- 字符串相等加符号
WHERE birth_date > '1990-01-01'
WHERE birth_date > '1990-01-01' AND points > 3000 -- 逻辑运算符: AND OR NOT,其中AND 被首先考虑,像乘除法一样
WHERE NOT (birth_date > '1990-01-01' OR points > 1000) -- 用NOT时,对第一个条件取否定,而不对第二个条件进行操作,
-- 将OR变为AND,故该子句最终输出,出生年份在1990年之前并且积分大于1000的人
-- 上面等同于 WHERE birth_date <= '1990-01-01' AND points > 1000

SELECT *
FROM customers
WHERE state = 'VA' OR state = 'GA' OR state = 'FL' -- 不用‘VA’OR‘GA’OR‘FL’是因为OR运算符不能与‘VA’直接相连,因为VA不能自己表示真假
WHERE state IN ('VA','FL','GA') -- 与上一条完全相同
WHERE state NOT ('VA','FL','GA') -- 不包括那三个州的

SELECT * -- 练习题
FROM products
WHERE quantity_in_stock IN ('49','38','72') 

SELECT *
FROM customers
WHERE points >= 1000 AND points <= 3000 -- 等同于下式
WHERE points BETWEEN 1000 AND 3000 -- BTEWEEN运算符:圈出范围,在什么之间

SELECT * -- 练习题
FROM customers
WHERE birth_date BETWEEN '1990-01-01' AND '2000-01-01'

SELECT * 
FROM customers
WHERE last_name LIKE 'b%' -- 以b开头的姓,%代表任意长度字符
WHERE last_name LIKE '%b%' -- 含b
WHERE last_name LIKE '%b' -- 以b结尾
WHERE last_name LIKE '_b' -- 只有两个字符长度,且以b为结尾,_代表一个字符

SELECT * -- 练习题
FROM customers
WHERE address LIKE '%TRAIL%' OR address LIKE '%AVENUE' 
WHERE phone NOT LIKE '%9%' -- 不包括9

SELECT * 
FROM customers
WHERE last_name REGEXP 'field' -- 什么都不加:包含field
WHERE last_name REGEXP '^field' -- 在前面加上^:以field开头 
WHERE last_name REGEXP 'field$' -- 在后面加上$:以field结尾
WHERE last_name REGEXP 'field|mac|rose' -- 在中间加上|:包含mac或field
WHERE last_name REGEXP '^field|mac|rose' -- 在field的前面加上^,表示寻找以field开头,或包含mac或包含rose的
WHERE last_name REGEXP '[gim]e' -- 此处方括号内的代表可选项,gim三个中选一个满足,
-- 方括号外的e为必选项,即寻找包含ge,或ie,或me的,方括号放后面就找eg,或ei,或em
WHERE last_name REGEXP '[a-h]e' -- a到h中的任何一项都可选, - 表示范围 

SELECT * -- 练习题
FROM customers
-- WHERE first_name REGEXP 'elka|ambur' 
-- WHERE last_name REGEXP 'EY$|ON$'
-- WHERE last_name REGEXP '^my|se'
WHERE last_name REGEXP 'b[ru]'

SELECT * 
FROM customers
WHERE phone IS NULL -- 找到电话缺失的人
WHERE phone IS NOT NULL -- 找到有电话的人

SELECT * -- 练习题
FROM orders
WHERE shipped_date IS NULL

SELECT * 
FROM customers
ORDER BY first_name -- 用名排序,默认升序
ORDER BY first_name DESC -- 用名排序,此时为降序
ORDER BY state DESC, first_name -- 用降序的州和名排序,先排洲,再排名,例如两人在同一洲时,排两人的名
-- ORDER BY 可以给任意一列排序,即使那一列不在SELECT范围内,也可以对重命名的列排序,也可以对算数表达式排序
-- SELECT 10 AS points 其中points是另赋的一列,定值10
-- ORDER BY points 同样可以对points排序
-- 也可以使用列位置排序,比如first_name是第一列,对1列排序,ORDER BY 1,但列位置排序容易被影响

SELECT * -- 练习题
FROM order_items
WHERE order_id = 2
ORDER BY quantity*unit_price DESC

SELECT * 
FROM customers
LIMIT 3 -- 限制只返回前三条记录,可以用于限制每页记录数
LIMIT 6,3 -- 其中6代表偏移量,意味着跳过前6条记录,输出第7到第6+3=9条记录

SELECT * -- 练习题
FROM customers
ORDER BY points DESC
LIMIT 3 -- 注意limit语句要永远放在最后

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值