SQL入门

Author Avatar
huuhghhgyg 3月 27, 2022
  • 在其它设备中阅读本文章
SELECT *
FROM table
WHERE column LIKE '条件'
Order by 1
LIMIT 100

基本语法

注释

--后面是注释内容。--是sql的注释标志

运算符

运算符 说明
AND 和,AND的优先级一般会高于OR
OR 或者
NOT
() 括号,提高优先级。

条件

符号 含义
% n个任意字符
_ 1个任意字符

正则表达式

REGEXP(Regular Expression)

WHERE column REGEXP '表达式'
符号 意义 例子
^ 以..开头 ^field
$ 以..结尾 field$
\ 或者 ^field|mac|rose
[] 匹配中括号内的所有字符 [gim]e,匹配ge、ie、me,
[a-c]d,匹配
ad、bd、cd,
[1-3]同理

注意:由于我使用的markdown编译器无法将表格中的代码中的|识别为符号,以上的|为全角符号

NULL

表达式 含义
IS NULL 值为null
IS NOT NULL 值不为null

AS

在原有数据基础上新建一列数据,或者理解为处理完原有列数据填入新一列中

score + 10 AS new _score

SELECT

选择表内的数据

SELECT first _name, last _name

ORDER BY

根据什么值排序

ORDER BY first _name

多值排序

ORDER BY state, first _name

根据列排序

ORDER BY 1, 2

DESC

  • descending:降序
ORDER BY first _name DESC

多值排序

ORDER BY state DESC, first _name

LIMIT

表达式 含义
LIMIT 6 设定返回查询数据的最大条数为6
LIMIT 6, 3 跳过前6条,再返回3条数据(返回第7-9条数据)

Alias 简写

SELECT customer _id c
From table_t
ORDER BY c

JOIN和ON

JOIN用于联系多个表的数据列。

SELECT *
FROM orders o
JOIN customers c
  ON o.customer _id = c.customer _id

切换数据库

USE 数据库名

SELECT *
FROM 另一个数据库名.数据表
…

UNION

用于合并多个查询结果。

SELECT first _name
FROM customers
UNION
SELECT name
FROM shippers
  • 如果一个查询里面有多个语句,一个语句结束后要使用分号(;)
  • UNION连接的查询语句只算一个语句

属性

列属性

数据类型

类型 含义
INT(11)
VARCHAR(50) 最大50个字符,且最大占用50个字符的空间,常用于保存string
CHAR(50) 最大50个字符,占用50个字符的的空间

数据属性

缩写 全称 含义
PK Primary Key 数据主键
NN Not Null 是否能接受NULL值?(可选值?)
AI Auto Increment 自动递增
Default / Expression - 默认值

数据管理

添加行

按照数据排列顺序,包含在VALUES里面添加。

全部添加

INSERT INTO customers
-- 如果想要用自动递增,可以直接填DEFAULT
-- 如果是可选值,不填入数据的话就填NULL
VALUES (
  DEFAULT,
  'first name value',
  'last name value',
  '1990-01-01',
  NULL,
  'address',
  'city',
  'CA')

选择部分变量添加

INSERT INTO customers(
  first _name,
  last _name,
  birth _date)
-- VALUES的顺序根据上面定义的顺序来,上面定义的数据顺序可以根据自己的喜好
VAULES(
  'first name value',
  'last name value',
  'date of birth')

添加多个变量

INSERT INTO shippers (name)
VALUES('shipper1'),
  ('shipper2'),
  ('shipper3')

向不同的表格添加变量

INSERT INTO orders (customer _id, order _date, status)
VALUES (1, '2019-01-02', 1);
INSERT INTO order _items
VALUES (LAST _INSERT _ID(), 1, 1, 2.95),
VALUES (LAST _INSERT _ID(), 2, 1, 3.95)

从一个数据表添加变量到另一个数据表

新建为数据表(CREATE)

CREATE TABLE ordres _archived AS
SELECT  * FROM orders
-- 这里的SELECT语句是SubQuery
  • 右键数据表的“truncate table”是清空数据表的所有数据

插入到数据表(INSERT)

INSERT INTO orders _archived
SELECT  *
FROM orders
WHERE order _date < '2019-01-01'

更新数据

更新单行数据

UPDATE table
SET payment _total = 10, payment _date = '2019-03-01'
WHERE invoice _id = 1

更新多行数据

UPDATE table
SET payment _total = 10, payment _date = '2019-03-01'
WHERE invoice _id IN (3, 4)
-- 如果要更新数据表中的所有值,只需留空WHERE

删除数据

DELETE FROM table
-- 如果没有WHERE语句,将会删除所有数据,非常危险。
WHERE client _id = (
  SELECT client _id
  FROM clients
  WHERE name = 'Myworks')
link
本文链接:
发文时间
3月 27, 2022
请遵循协议