mosh数据库——第二章

1.选择语句 

USE store;
select customer_id from customers
where customer_id = 1
order by first_name 
-- 不能改变顺序,否则会结构错误
-- 会被视为注释

按照use、select....from、where、order by、limit的顺序   -- 不能改变顺序,否则会结构错误

  1. -- 会被视为注释
  2. 要用分号(;)终止每条语句 
  3. 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'列名中有空格要在外面添加''或""
  1. *表示全部
  2. 优先次序:乘号和除号比加号和减号有更高的顺位
  3. 可以用括号来改变运算符顺序
  4. AS 修改列的别名给列和结果集一个描述性名称
  5. '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' -- >日期之后
-- 日期不是字符串但是日期外面要加引号
  1. 比较运算符
    ​​​​​​
  2. 字符串外面要加引号
  3. 引号里面'va'的大写小写无所谓
  4. !=和<>都是不等于
  5. 日期不是字符串,但是日期外面要加引号

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'))-- 算术运算符也可以写在字句里
  1. AND的两个条件都要正确
  2. OR一个条件正确(至少满足一个),那行就会在结果集被返回
  3. 算数运算符也可以写在字句里
  4. 逻辑运算符的顺序 :先 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
  1. OR不能将字符串与布尔值链接
  2. OR运算符合并多个条件可以用in
  3. WHERE state NOT IN ('VA','GA','FL')   -- 括号里的顺序无所谓
  4. 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的
  1. %表示任意字符数  
  2. _表示一个字符
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,多个搜索模式
  1. REGEST:正则表达式(字符串模式)
  2. ^表示开头
  3. $表示末尾
  4. |表示或者
SELECT *
FROM customers
-- WHERE last_name REGEXP '[gim]e'  -- []方括号里面加多个字母(或的关系)
-- ge
-- ie
-- me
WHERE last_name REGEXP 'e[a-h]'  -- []方括号里面可以用- 表示谁到谁,一个范围
  1. []方括号里面加多个字母分别对应
  2. []方括号里面可以用- 表示谁到谁,一个范围

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会报错

  • 30
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值