MySQL基础:在单一表格中检索数据

1. 选择语句

对于数据库的操作,双击该数据库表示选中。或者采用USE关键字。MySQL不区分大小写,但习惯性的我们采用大写来书写关键字,采用小写来标识其他。
语法规则:

USE sql_store
SELECT *   -- 选中所有的列
FROM customers  -- 选择表
WHERE customers_id = 1  -- 筛选行数据(单行注释符后面需要加一个空格才能生效)
ORDER BY first_name    -- 子句顺序不要发生改变
/*
多行注释
*/

NOTE:

  • 语句后面要用分号结束,子句后面不用分号
  • SQL会完全无视大小写(任何情况下的大小写)、多余的空格(超过一个的空格)、缩进和换行
  • SQL语句间完全由分号 ; 分割
  • 用缩进、换行等只是为了代码看着更美观结构更清晰

2. 选择子句SELECT

SELECT式列/字段选择语句,也可重新创造一列。可进行的操作有:

  • 数学运算,符合运算顺序
  • AS关键字设置别名。AS可以省略,空格后面跟别名就可,但是需要加空格
  • DISTINCT关键字提取不重复字段下的值
SELECT
    last_name,
    first_name,
    points,
    points * 10 + 100 AS discount_factor  
    -- 满足基本运算顺序,或'discount factor'
    -- AS关键字用来重新命名
FROM customers
SELECT DISTINCT state
-- distinct关键字可以将属性列中不重复的值提取出来
FROM customers

3. WHERE子句

WHERE行筛选条件,实际式一行一行/一条条记录依次验证是否符合条件进行挑选,然后将符合条件的值输出。
算术运算符的应用:

符号意义
>大于
>=大于等于
<小于
<=小于等于
=等于
!= AS <>不等于
SELECT *
FROM customers
WHERE birth_date > '1991-09-11'   -- 日期用单引号表示

4. AND/OR/NOT运算符

优先级:NOT>AND>OR
同时:数学>比较>逻辑,优先级可以通过()改变
NOT可用于BETWEEN/LIKE/IN之前

SELECT *
FROM order_items
WHERE order_id = 6 AND quantity * unit_price > 30
WHERE NOT (birth_date > '1990-01-01' OR points > 1000)
WHERE birth_date <= '1990-01-01' AND points <= 1000

5. IN运算符

IN实际是多重相等比较运算条件的简化,该运算符实现在某一列中提取符合条件的值

SELECT *
FROM customers
WHERE state IN ('VA', 'FL', 'GA')
WHERE state = 'VA' OR state = 'FL' OR state = 'GA'
WHERE state NOT IN ('VA', 'FL', 'GA')

6. BETWEEN运算符

BETWEEN为范围型条件,其表示的意义为:

  • 用AND不是()
  • 闭区间,包含两个端点
  • 也能用于日期判定,日期其实也是一串数字可以比较大小
  • 与IN一样其实也是多重比较判断的简化
SELECT *
FROM customers
WHERE points BETWEEN 1000 AND 3000
WHERE points >=1000 AND points <= 3000

7.LIKE运算符

LIKE为字符串的操作,模糊查找符合条件的值。

  • % 任何个数(包括0个)的字符(类似通配符里的 *)
  • _ 单个字符(类似通配符里的 ?)
符号意义
B%以b开头字符串
%b以b结尾字符串
%b%包含b的字符串
__y三个字节,第三个为y
SELECT *
FROM customers
WHERE address LIKE '%trail%' OR 
      address LIKE '%avenue%' AND phone LIKE '%9%'

8. REGEXP运算符

正则表达式,用于搜索字符串应用,可搜索更复杂的模板.
正则表达式(Regular Expression)是用于描述一组字符串特征的模式,用来匹配特定的字符串。通过特殊字符+普通字符来进行模式描述,从而达到文本匹配目的工具。
正则表达式目前被集成到了各种文本编辑器/文本处理工具当中。

符号意义
^xx以xx开头
xx$以xx结尾
[abc]包含abc任意一个字符的字符串
[a-f]包含a到f任意一个的字符串
逻辑或的意思
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]'

9. IS NULL运算符

找出空值,找出某些属性值缺失的记录 IS NULL/IS NOT NULL

SELECT *
FROM customers
-- WHERE phone IS NOT NULL
WHERE phone IS NULL

10. ORDER BY子句

用于对列表中的值进行排序。
可多列(根据排列顺序先对第一列规则排序,相同情况下再按照第二列的规则排序),可包括没选择的列(MySQL特性,在SELECT中未选择但是在ORDER BY中可以用),不仅可以是列,也可是列间的数学表达式以及之前定义好的别名列(MySQL特性),任何一个排序依据列后面都可选加 DESC

workbench 中扳手图标打开表格的设计模式,查看或修改表中各列(属性)。
省略排序语句的话会默认按主键排序 ASC 升序 DESC 降序

尽量不要用ORDER BY 1,2这样用数字来表示列,因为列变动后排序的规则也发生了变化。

SELECT *, quantity * unit_price AS total_price
FROM order_items
WHERE order_id = 2
ORDER BY quantity * unit_price DESC

11. LIMIT子句

可以选择型的展示列表中的实体个数,可以显示前N个或者显示偏移M个后的N个数据。如果设置的值大于实体的个数,将表中的数据列出。
格式:LIMIT 6,3 或者LIMIT 3

SELECT * FROM customers
ORDER BY points DESC 
LIMIT 3
  • 21
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值