1.选择语句
USE store;
select customer_id from customers
where customer_id = 1
order by first_name
-- 不能改变顺序,否则会结构错误
-- 会被视为注释
按照use、select....from、where、order by、limit的顺序 -- 不能改变顺序,否则会结构错误
- -- 会被视为注释
- 要用分号(;)终止每条语句
-
control+shift+enter =运行
2.选择字句
SELECT
first_name , -- 或者用*表示全部列
last_name ,
points ,
points * 10 + 5 as 'discount fact',-- 列名中有空格要在外面添加''或""
(points + 3) * 100 AS discount_factor -- AS 修改列的别名,给列和结果集一个描述性名称
FROM customers
-- 优先次序:乘号和除号比加号和减号有更高的顺位
-- 可以用括号来改变运算符顺序
-- AS 修改列的别名,给列和结果集一个描述性名称customers
-- 'discount fact'列名中有空格要在外面添加''或""
- *表示全部
- 优先次序:乘号和除号比加号和减号有更高的顺位
- 可以用括号来改变运算符顺序
- AS 修改列的别名,给列和结果集一个描述性名称
- 'discount fact'列名中有空格要在外面添加''或""
SELECT state FROM customers;
SELECT DISTINCT state FROM customers;
-- DISTINCT可以消除重复值
DISTINCT可以消除重复值
3.WHERE子句
SELECT *
FROM Customers
WHERE state <> "VA" -- 外面要加引号因为他是字符串
-- va的大写小写无所谓
-- !=和<>都是不等于
SELECT *
FROM Customers
WHERE birth_date > '1990-01-01' -- >日期之后
-- 日期不是字符串但是日期外面要加引号
- 字符串外面要加引号
- 引号里面'va'的大写小写无所谓
- !=和<>都是不等于
- 日期不是字符串,但是日期外面要加引号
4.逻辑运算符
SELECT *
FROM Customers
-- WHERE NOT (birth_date > '1990-01-01' OR (points > 1000 AND state = 'va'))
WHERE (birth_date <= '1990-01-01' AND
(points <= 1000 OR state != 'va'))-- 算术运算符也可以写在字句里
- AND的两个条件都要正确
- OR一个条件正确(至少满足一个),那行就会在结果集被返回
- 算数运算符也可以写在字句里
- 逻辑运算符的顺序 :先 AND 后 OR (可以用括号改变顺序)
5.IN运算符
SELECT * FROM customers
-- WHERE state = 'VA' OR 'GA' OR 'FL' -- 是错误的,OR不能将字符串与布尔值链接
WHERE state = 'VA' OR state = 'GA' OR state = 'FL'
WHERE state IN ('VA','GA','FL') -- 括号里的顺序无所谓
-- 也可以使用NOT
- OR不能将字符串与布尔值链接
- OR运算符合并多个条件可以用in
- WHERE state NOT IN ('VA','GA','FL') -- 括号里的顺序无所谓
- IN也可以使用NOT
6.BETWEEN运算符
SELECT *
FROM customers
WHERE points BETWEEN 1000 AND 3000
-- 可以代替points >=1000 and points <=3000
必须要有and连接,不可以连着一串式子(1000<= points <=3000 是不对的)
7.LIKE运算符
SELECT *
FROM customers
WHERE last_name LIKE '%b%'; -- 任意位置含有b
SELECT *
FROM customers
WHERE last_name LIKE '%y'; -- 以y结尾的
SELECT *
FROM customers
WHERE last_name LIKE '_____y' -- 以第6个字母是y的
- %表示任意字符数
- _表示一个单字符
SELECT *
FROM customers
where address LIKE '%TRAIL%' OR address LIKE '%AVENUE%';
SELECT *
FROM customers
where phone not like '%9'-- 可以使用NOT
8.REGEXP运算符
正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"),可以用来描述和匹配字符串的特定模式。
SELECT *
FROM customers
WHERE last_name REGEXP 'field' ;-- 在字符串模式中不需要输入%
-- WHERE last_name like "%field%" 是相同的
SELECT *
FROM customers
WHERE last_name REGEXP 'field$|^mac|rose' -- |表示or,多个搜索模式
- REGEST:正则表达式(字符串模式)
- ^表示开头
- $表示末尾
- |表示或者
SELECT *
FROM customers
-- WHERE last_name REGEXP '[gim]e' -- []方括号里面加多个字母(或的关系)
-- ge
-- ie
-- me
WHERE last_name REGEXP 'e[a-h]' -- []方括号里面可以用- 表示谁到谁,一个范围
- []方括号里面加多个字母分别对应
- []方括号里面可以用- 表示谁到谁,一个范围
9.IS NULL 运算符
null意味着值缺失
SELECT *
FROM customers
WHERE phone IS NULL --可以与not一起用
--WHERE phone IS NOT NULL
10. ORDER BY字句
SELECT *
FROM customers
ORDER BY first_name DESC
ORDER BY State,first_name DESC
DESC是降序
SELECT first_name, last_name
FROM customers
ORDER BY birth_date
mysql里面可以用任一列排列数据,不管那列是不是在SELECT字句里,但是在其他数据库管理系统写这样的查询会报错
SELECT first_name, last_name, 10 AS points
FROM customers
ORDER BY points, first_name
可以根据别名(或者算术表达式)
SELECT first_name, last_name, 10 AS points
FROM customers
ORDER BY 1, 2 -- first_name, last_name
可以根据列位置顺序(一般避免使用,最好打全称)
SELECT *, quantity * unit_price AS total_price
FROM order_items
WHERE order_id = 2
ORDER BY total_price DESC
11.LIMIT字句
条件比记录数还要多的话返回全部
SELECT *
FROM customers
LIMIT 300 -- 一共只有10
-- offset 偏移
SELECT *
FROM customers
limit 6,3 -- 跳过前六条记录然后获取三条记录
offset偏移: limit 6,3 跳过前六条记录然后获取三条记录
SELECT *
FROM customers
ORDER BY points DESC
LIMIT 3
-- limit字句永远要放在最后,如果改变顺序,MySQL会报错
limit字句永远要放在最后,如果改变顺序,MySQL会报错