【MySQL】查询语句

本文介绍了SQL的基本结构,包括使用数据库、选择列、条件查询、排序、运算符(如=,!=,BETWEEN,LIKE,REGEXP)以及LIMIT子句的应用。涵盖了选择语句、子句的组合以及常见的筛选和排序技巧。
摘要由CSDN通过智能技术生成

选择语句 / 子句

  • USE:选择使用的database
  • SELECT:选择查询的列
  • FROM:选择查询的表
  • WHERE:条件查询
  • ORDER BY :排序
-- 关键词:USE, SELECT, FROM,WHERE, ORDER BY
USE sql_store; -- 选择一个database

SELECT *  -- 选择所有的列
FROM customers -- 从customers这个表中
WHERE customer_id = 1 -- 查询条件:查到id为1的数据
ORDER BY first_name -- 根据firstname排序
-- 注意:SELECT, FROM, WHERE, ORDER BY的顺序是固定的,如果改变语句的顺序,会发生语法错误
-- 关键词:AS
SELECT
       first_name,
       last_name,
       points,
       (points + 10) * 100 AS discount_factor -- AS 可以为列取名字
FROM customers
-- 小小作业
SELECT
    name,
    unit_price,
    unit_price * 1.1 AS 'new price' -- 列名要想用空格的话,需要用单引号引起来,否则不能用空格
FROM products

比较运算符

  • 等于:是= 而不是==
  • 不等:!= 或者 <> ,这两个都表示不等
SELECT *
FROM customers
WHERE state = 'VA' //表示筛选在VA的数据

WHERE state <> 'VA' //表示筛选不在VA的数据
-- 注意:字符串需要用单引号引起

WHERE birth_date > '1990-01-01'
-- 筛选日期时,也要将日期用单引号引起。
-- MySQL标准或默认日期表述形式:4位年份-2位月份-2位日期
-- 小小练习
SELECT *
FROM orders
WHERE order_date >= '2019-01-01 '

AND,OR,NOT运算符

  • 优先级:AND > OR
SELECT *
FROM customers
WHERE birth_date > '1990-01-01' OR
      (points > 1000 AND state = 'VA')
-- 小小练习
SELECT *
FROM order_items
WHERE order_id = 6 AND unit_price * quantity > 30

IN运算符

SELECT *
FROM customers
-- 查询多个条件时用OR比较麻烦
WHERE state = 'VA' OR state = 'GA' OR state = 'FL'
-- 此时可以用IN运算符
WHERE state IN ('VA', 'FL', 'GA')
-- 可用NOT IN查询不在IN范围内的
WHERE state NOT IN ('VA', 'FL', 'GA')
-- 小小练习
SELECT *
FROM products
WHERE quantity_in_stock IN (49, 38, 72)

BETWEEN运算符

  • BETWEEN……AND……
SELECT *
FROM customers
-- 积分在1000到3000范围内的数据
WHERE points >= 1000 AND points <= 3000

-- 用BETWEEN更加简介
WHERE points BETWEEN 1000 AND 3000

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

LIKE运算符

  • % 代表任意字符数
  • _ 代表一个单字符
SELECT *
FROM customers
-- 查询以b或B开头的lastname的数据,表示在b之后可以有任意字符数
WHERE last_name LIKE 'b%'

-- 表示在b之前和之后都可有任意字符数
WHERE last_name LIKE '%b%'

-- 表示y之前有5个字符
WHERE last_name LIKE '_____y'

-- 表示b和y之间有4个字符
WHERE last_name LIKE 'b____y'

-- 小小联系
-- 1
SELECT *
FROM customers
WHERE address LIKE '%trail%' OR
      address LIKE '%avenue%';

-- 2
SELECT *
FROM customers
WHERE phone LIKE '%9';

REGEXP运算符

  • 正则表达式
    • ^ 代表字符串开头
    • ¥ 代表字符串结尾
    • | 代表逻辑或,可以给多个搜索模式
    • [abcd] 匹配任意在括号里列举的单字符
    • [a-f] 匹配从a到f的字符
SELECT *
FROM customers
WHERE last_name REGEXP 'field|mac|rose'
-- 逻辑或,搜索姓名中有field、mac或rose的数据
SELECT *
FROM customers
WHERE last_name REGEXP '^rose'
-- 代表rose开头,搜索以rose开头的数据
SELECT *
FROM customers
WHERE last_name REGEXP 'field$'
-- 代表field结尾,搜索以field结尾的数据
SELECT *
FROM customers
WHERE last_name REGEXP '[gim]e'
-- 任何姓氏中有ge、ie或me的数据

WHERE last_name REGEXP '[a-h]e'
-- 任何姓氏中有ae,be,ce…… he的数据
-- 小小练习
-- 踩坑:注意引号内的内容不能随便加空格,加空格的话就会被认为需要匹配一个空格
SELECT *
FROM customers
WHERE last_name REGEXP 'EY$|ON$'

SELECT *
FROM customers
WHERE first_name REGEXP 'ELKA|AMBUR'


SELECT *
FROM customers
WHERE last_name REGEXP '^MY|SE'

SELECT *
FROM customers
WHERE last_name REGEXP 'B[RU]'

IS NULL运算符

  • IS NULL
  • IS NOT NULL
-- 小小练习
SELECT *
FROM orders
WHERE shipped_date IS NULL

ORDER BY子句

  • DESC 代表倒序排列
SELECT *
FROM customers
ORDER BY first_name DESC
-- DESC代表倒序排列

ORDER BY state DESC, first_name
-- 代表先用state降序排列,相同state的按名字升序排列。可以把DESC写在任意条件后
-- 只筛选名和姓两列
-- 但可以按生日排序
-- 其他数据库中这样查询会报错,mySQL不会报错
SELECT first_name, last_name
FROM customers
ORDER BY birth_date

ORDER BY 1, 2
-- 按列顺序排列,代表按照firstname,lastname排列。最好尽量避免这种排序方法
-- 小小练习
SELECT *, quantity * unit_price AS total_price
FROM order_items
WHERE order_id = 2
ORDER BY total_price DESC

LIMIT 子句

  • 限定查询返回的记录
SELECT *
FROM customers
LIMIT 3
-- 返回前3个数据

LIMIT 6, 3 
-- 跳过前6个数据,返回7-9这3个数据
-- page 1: 1 - 3
-- page 2: 4 - 6
-- page 3: 7 - 9
-- 小小练习,返回前三忠实的顾客(积分排名前3)
SELECT *
FROM customers
ORDER BY points DESC
LIMIT 3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xuwuuu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值