SQL语法


[TOC]

登录数据库

cmd命令行输入:

mysql -u username -p

or

mysql -u username -ppassword(这里-p要和你的密码紧靠在一起)

1

基本操作

创建数据库、表

CREATE DATABASE dbname; #创建数据库
DROP DATABASE dbname;  #删除数据库

DROP TABLE table_name; #删除表
CREATE TABLE table_name #创建数据库中的表
(
column_name1 data_type(size) (constraint_name),
column_name2 data_type(size) (constraint_name),
column_name3 data_type(size) (constraint_name),
....
);

column_name:参数规定表中列的名称;
data_type:参数规定列的数据类型(例如 varcharintegerdecimaldate 等等);
size:参数规定表中列的最大长度;
constraint_name(可选):约束名。

约束(Constraints)

SQL 约束用于规定表中的数据规则。如果存在违反约束的数据行为,行为会被约束终止。约束可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)

在 SQL 中,我们有如下约束:

  • NOT NULL - 指示某列不能存储 NULL 值。
  • UNIQUE - 保证某列的每行必须有唯一的值。
  • PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
  • FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
  • CHECK - 保证列中的值符合指定的条件。
  • DEFAULT - 规定没有给列赋值时的默认值。

ALTER(待写)

DROP(待写)

注意:SQL语言中每条命令以;结尾;

show databases; ==> 展现所有数据库名

show tables; ==> 展现当前数据库的所有表名

use databaseName; ==> 使用databaseName数据库

数据查询语句

SELECT

SELECT:用于从数据库中选取数据;

基本格式:

SELECT column1, column2, ...
FROM table_name;
  • column1, column2, …:要选择的字段名称,可以为多个字段。如果不指定字段名称或指定为*,则会选择所有字段;
  • table_name:要查询的表名称。

3

SELECT DISTINCT

SELECT DISTINCT:用于返回唯一不同的值。

基本格式:

SELECT DISTINCT column1, column2, ...
FROM table_name;
  • **column1, column2, …**:要选择的字段名称,可以为多个字段。如果不指定字段名称或指定为*,则会选择所有字段;
  • table_name:要查询的表名称。

如下:去除了city列中的重复值;

4

Note:若指定了多个column,则表示排除column都相等的;

WHERE

WHERE:该子句用于过滤记录;用于提取那些满足指定条件的记录。

格式:

SELECT column1, column2, ...
FROM table_name
WHERE condition;
  • condition:指定的条件,可以用AND/&&或者OR/||连接多个条件,或在condition前加NOT表示否定;优先级:()>not>and>or;
  • column,table_name解释如上SELECT;

5

Note:SQL 使用单引号''来环绕文本值(可双引号"");如果是数值字段,请不要使用引号。

可在where子句中使用的运算符
运算符 描述
= 等于
<> 不等于。注释:在 SQL 的一些版本中,该操作符可被写成 !=
> 大于
< 小于
>= 大于等于
<= 小于等于
BETWEEN 在某个范围内
LIKE 搜索某种模式
IN 指定针对某个列的多个可能值
LIKE运算符

LIKE:该操作符用于在WHERE 子句中搜索列中的指定模式。

格式:

SELECT column1, column2, ...
FROM table_name
WHERE column_ LIKE pattern;
  • column_:要匹配的字段名称;
  • pattern:搜索模式。

通配符:可用于替代字符串中的任何其他字符。

通配符 描述
% 替代 0 个或多个字符
_ 替代一个字符
[charlist] 字符列中的任何单一字符
[^charlist] 或 [!charlist] 不在字符列中的任何单一字符

LIKE 与 通配符 配合使用:

当 like后面直接加具体的值(column like value)则相当于 column=vlaue,可以用来饶过=过滤;

8

[charlist]通配符:MySQL 中使用 REGEXPNOT REGEXP 运算符 (或 RLIKE 和 NOT RLIKE) 来操作正则表达式。

格式:

SELECT column1, column2, ...
FROM table_name
WHERE column_ REGEXP pattern;
  • column_:要匹配的字段名称;
  • pattern:正则表达式。

9

IN运算符

IN:该操作符允许您在 WHERE 子句中规定多个值。

格式:

SELECT column1, column2, ...
FROM table_name
WHERE column_ IN (value1, value2, ...);
  • column_:要匹配的字段名称;
  • value1, value2, …:要查询的值,可以为多个值。

10

Note:其实就相当于 column_ = value1 || column_ = value2 || …

BETWEEN运算符

BETWEEN:该操作符用于选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。

格式:BETWEEN … AND ….

SELECT column1, column2, ...
FROM table_name
WHERE column_ BETWEEN value1 AND value2;
  • column_:要匹配的字段名称;
  • value1、value2:范围的起始值和结束值。

6

Note:如果是文本的话,按照字符对应的数值依此比较;如下:

7

Note:

  • 在某些数据库中,BETWEEN 不包括两个测试值的字段;
  • 在某些数据库中,BETWEEN 包括两个测试值的字段;
  • 在某些数据库中,BETWEEN 包括第一个但不包括最后一个测试值的字段。

WHERE特殊使用情况:

  • 直接 where 0(非0); 0时返回空,1时返回所有查询的列的值

11

  • 空值判断:is null

eg:select * from p where color is null; 查询color列中的空值。

ORDER BY

order by: 该关键字用于对结果集按照一个列或者多个列进行排序。默认按照升序排序。如果需要按照降序排序,可使用 DESC 关键字。

格式:

SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;
  • column1, column2, …:要排序的字段名称,column1全局排序,column2,…则是局部排序;
  • ASC:表示按升序排序;
  • DESC:表示按降序排序。

12

可以看出:qty是降序的,而jno在qty相同的情况下是升序的

LIMIT

LIMIT:用于规定要返回的记录的数目。

格式:(MySQL中

SELECT column_name(s)
FROM table_name
LIMIT number; #number为返回记录的数目

16

AS(SQL 别名)

通过SQL,可以为表名称或列名称指定别名。

#列的 SQL 别名语法
SELECT column_name AS alias_name
FROM table_name;

#表的 SQL 别名语法
SELECT column_name(s)
FROM table_name AS alias_name;

#Note:如果列名称包含空格,要求使用双引号或方括号:

在下面的情况下,使用别名很有用:

  • 在查询中涉及超过一个表
  • 在查询中使用了函数
  • 列名称很长或者可读性差
  • 需要把两个列或者多个列结合在一起

JOIN

JOIN :用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段

在使用 join 时,onwhere 条件的区别如下:

  • on 条件是在生成临时表时使用的条件,它不管 on 中的条件是否为真,都会返回左边表中的记录。
  • where 条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有 left join 的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

A inner join B 取交集;

A left join B 取 A 全部,B 没有对应的值为 null;

A right join B 取 B 全部 A 没有对应的值为 null;

A full outer join B 取并集,彼此没有对应的值为 null。

INNER JOIN

INNER JOIN:在表中存在至少一个匹配时返回行;等同于JOIN。

格式:

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;

or

SELECT column_name(s)
FROM table1
JOIN table2
ON table1.column_name=table2.column_name;
  • column_name(s):要显示的列名。
  • table1:表1的名称。
  • table2:表2的名称。
  • tablex.column_name:表中用于连接的列名。

17

LEFT JOIN

LEFT JOIN:从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。

格式:

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;

or

SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;

18

RIGHT JOIN

与LEFT JOIN相反,使用相同把left 改为 right即可。

FULL JOIN

FULL OUTER JOIN:关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行;结合了 LEFT JOIN 和 RIGHT JOIN 的结果。

格式:

SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;
>_< 我电脑版本好像不支持

UNION

UNION:合并两个或多个 SELECT 语句的结果。

Note:UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同

格式:

#UNION 操作符选取不同的值。如果允许重复的值,则使用UNION ALL;
#UNION 结果集中的列名等于UNION中第一个 SELECT 语句中的列名。
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

19

数据更新语句

插入:INSERT INTO语句

INSERT INTO:用于向表中插入新记录。

格式1 :无需指定要插入数据的列名,只需提供被插入的值即可:

INSERT INTO table_name
VALUES (value1,value2,value3,...);

格式2:指定列名及被插入的值:

INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);
  • column为table_name表中的字段;

13

更新:UPDATE语句

UPDATE:用于更新表中已存在的记录。

格式:

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
  • able_name:要修改的表名称;
  • column1, column2, …:要修改的字段名称,可以为多个字段;
  • value1, value2, …:要修改的值,可以为多个值;
  • condition:修改条件,用于指定哪些数据要修改。

14

Note:update更新数据时,切记不要忘记带where子句,否则你的表中的相应字段的值都会被修改。

删除:DELETE语句

DELETE:用于删除表中的行。

格式:

DELETE FROM table_name
WHERE condition;
  • table_name:要删除的表名称;

  • condition:删除条件,用于指定哪些数据要删除。

15

Note:

  • delete删除数据时,切记不要忘记带where子句,否则你表中的所有记录都会被修改。
  • 可以在不删除表的情况下,删除表中所有的行。这意味着表结构、属性、索引将保持不变:DELETE FROM table_name;

复制:INSERT INTO SELECT

INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。目标表中任何已存在的行都不会受影响。

格式:

INSERT INTO table2[(column_name(s))]
SELECT *[columns_name(s)] FROM table1;

20

视图(待写)

SQL函数(待写)


文章作者: XiaozaYa
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 XiaozaYa !
  目录