[TOC]
登录数据库
cmd命令行输入:
mysql -u username -p
or
mysql -u username -ppassword(这里-p要和你的密码紧靠在一起)
基本操作
创建数据库、表
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:参数规定列的数据类型(例如 varchar、integer、decimal、date 等等);
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:要查询的表名称。
SELECT DISTINCT
SELECT DISTINCT:用于返回唯一不同的值。
基本格式:
SELECT DISTINCT column1, column2, ...
FROM table_name;
- **column1, column2, …**:要选择的字段名称,可以为多个字段。如果不指定字段名称或指定为
*
,则会选择所有字段; - table_name:要查询的表名称。
如下:去除了city列中的重复值;
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;
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,可以用来饶过=
过滤;
[charlist]通配符:MySQL 中使用 REGEXP 或 NOT REGEXP 运算符 (或 RLIKE 和 NOT RLIKE) 来操作正则表达式。
格式:
SELECT column1, column2, ...
FROM table_name
WHERE column_ REGEXP pattern;
- column_:要匹配的字段名称;
- pattern:正则表达式。
IN运算符
IN:该操作符允许您在 WHERE 子句中规定多个值。
格式:
SELECT column1, column2, ...
FROM table_name
WHERE column_ IN (value1, value2, ...);
- column_:要匹配的字段名称;
- value1, value2, …:要查询的值,可以为多个值。
Note:其实就相当于 column_ = value1 || column_ = value2 || …
BETWEEN运算符
BETWEEN:该操作符用于选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
格式:BETWEEN … AND ….
SELECT column1, column2, ...
FROM table_name
WHERE column_ BETWEEN value1 AND value2;
- column_:要匹配的字段名称;
- value1、value2:范围的起始值和结束值。
Note:如果是文本的话,按照字符对应的数值依此比较;如下:
Note:
- 在某些数据库中,BETWEEN 不包括两个测试值的字段;
- 在某些数据库中,BETWEEN 包括两个测试值的字段;
- 在某些数据库中,BETWEEN 包括第一个但不包括最后一个测试值的字段。
WHERE特殊使用情况:
- 直接 where 0(非0); 0时返回空,1时返回所有查询的列的值
- 空值判断: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:表示按降序排序。
可以看出:qty是降序的,而jno在qty相同的情况下是升序的
LIMIT
LIMIT:用于规定要返回的记录的数目。
格式:(MySQL中
SELECT column_name(s)
FROM table_name
LIMIT number; #number为返回记录的数目
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 时,on 和 where 条件的区别如下:
- 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:表中用于连接的列名。
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;
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;
数据更新语句
插入: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表中的字段;
更新:UPDATE语句
UPDATE:用于更新表中已存在的记录。
格式:
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
- able_name:要修改的表名称;
- column1, column2, …:要修改的字段名称,可以为多个字段;
- value1, value2, …:要修改的值,可以为多个值;
- condition:修改条件,用于指定哪些数据要修改。
Note:update更新数据时,切记不要忘记带where子句,否则你的表中的相应字段的值都会被修改。
删除:DELETE语句
DELETE:用于删除表中的行。
格式:
DELETE FROM table_name
WHERE condition;
table_name:要删除的表名称;
condition:删除条件,用于指定哪些数据要删除。
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;