SQL语句
语句
select (查询)
SELECT 语句用于从数据库中选取数据,结果被存储在一个结果表中,称为结果集。
语法:
--选取表的某某列
SELECT column_name,column_name FROM table_name;
--选取表的所有的列
SELECT * FROM table_name;
--选取选取表的某某列的某某列
SELECT column_name,column_name FROM (SELECT column_name,column_name FROM table_name);
insert into()
用于向表中插入新记录
语法:
--无需指定要插入数据的列名,只需提供被插入的值(与数据库表的字段匹配)
INSERT INTO table_name VALUES (value1,value2,value3,...);
--需要指定列名及被插入的值
INSERT INTO table_name (column1,column2,column3,...) VALUES (value1,value2,value3,...);
--将指定的数据插入到现成的表中
INSERT INTO table_name SET column1 = value1,column2 = value2;
--将另外表中数据查出来并插入到表中
INSERT INTO table_name1 SELECT * FROM table_name2;
--插入多条数据
INSERT INTO table_name (column1,column2,column3,...) VALUES (value1,value2,value3,...),(value1,value2,value3,...);
update(修改)
用于更新表中已存在的记录
语法:
--更新表中满足条件的记录
UPDATE table_name SET column1=value1,column2=value2,... WHERE some_column=some_value;
--多表之间的修改
UPDATE table_name1,table_name2 SET table_name1.column1 = table_name2.column1 WHERE table_name1.column2 = table_name2.column2;
delete(删除)
用于删除表中的记录
语法:
--删除表中满足条件的记录
DELETE FROM table_name WHERE some_column = some_value;
create(创建)
语法:
--创建数据库
CREATE DATABASE dbname;
--创建数据库中的表
--data_type 参数规定列的数据类型(例如 varchar、integer、decimal、date 等等)。
--size 参数规定表中列的最大长度。
CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
....
);
--constraint_name用于规定表中的数据规则,在表创建之后规定(通过 ALTER TABLE 语句)
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,
....
);
constraint_name约束:
- NOT NULL - 指示某列不能存储 NULL 值。
- UNIQUE - 保证某列的每行必须有唯一的值。
- PRIMARY KEY - NOT NULL 和 UNIQUE的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
- FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
- CHECK - 保证列中的值符合指定的条件。
- DEFAULT - 规定没有给列赋值时的默认值。
drop(删除)
关键字
distinct(去除重复值)
仅列出表中不同(distinct)的值。distinct关键词用于返回不同的值。
语法:
--选取表的某某列不同的值
SELECT DISTINCT column_name,column_name FROM table_name;
order by(排序)
用于对结果集进行排序,默认升序排列。ASC关键字升序,DESC 关键字降序,该关键字只对它紧跟着的第一个列名有效,其他不受影响,仍然是默认的升序。
语法:
--选取表的某某列的数据按某某排序
SELECT column_name,column_name FROM table_name ORDER BY column_name,column_name ASC|DESC;
join(连接)
用于把来自两个或多个表的行结合起来
语法:
--获取
SELECT A.column_name1,B.column_name2 FROM table_name A INNER JOIN table_name B ON A.column_name1 = B.column_name1 ORDER BY A.column_name1;
使用的 JOIN 类型,以及它们之间的差异。
- JOIN: 如果表中有至少一个匹配,则返回行
- LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
- RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
- INNER JOIN:表中都匹配,就返回行
- FULL JOIN: 只要其中一个表中存在匹配,就返回行
union(合并)
合并两个或多个 SELECT 语句的结果
语法:
--选取合并两个或多个 SELECT 语句不同的值
SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2
--选取合并两个或多个 SELECT 语句所有的值
SELECT column_name(s) FROM table1 UNION ALL SELECT column_name(s) FROM table2;
into(复制)
从一个表复制数据,然后把数据插入到另一个新表中
语法:
--从一个表复制数据,然后把数据插入到另一个新表中
SELECT column_name(s) INTO newtable [IN externaldb] FROM table1;
注意:MySQL 数据库不支持 SELECT … INTO 语句,但支持 INSERT INTO … SELECT 。
语法:
--从一个表复制数据,然后把数据插入到一个已存在的表中
INSERT INTO table2 (column_name(s)) SELECT column_name(s) FROM table1;
index(索引)
CREATE INDEX 语句用于在表中创建索引,在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。
语法:
--在表上创建一个简单的索引。允许使用重复的值
CREATE INDEX index_name ON table_name (column_name);
--在表上创建一个唯一的索引。不允许使用重复的值
CREATE UNIQUE INDEX index_name ON table_name (column_name)
注意:更新一个包含索引的表需要比更新一个没有索引的表花费更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。
子句
where(条件)
用于提取那些满足指定标准的记录
语法:
--选取表的某某列满足条件的数据
SELECT column_name,column_name FROM table_name WHERE column_name operator value;
top/limit/rownum(数目)
用于规定要返回的记录的数目,多数使用TOP 语句,但MySQL 支持 LIMIT 语句,Oracle 使用 ROWNUM 。
语法:
--选取N行表的某某列数据
SELECT TOP number|percent column_name(s) FROM table_name;
SELECT column_name(s) FROM table_name LIMIT number;
SELECT column_name(s) FROM table_name WHERE ROWNUM <= number;
运算符
and/or(与/或)
如果第一个条件和第二个条件都成立,则 AND 运算符显示该记录。
如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示该记录。
语法:
--选取表的某某列满足 全部/其一 条件的数据
SELECT column_name,column_name FROM table_name WHERE column_name operator value AND/OR column_name operator value ;
操作符
like(模糊查询)
用于在 WHERE 子句中模糊查询,like '%%'默认为查询所有
‘%a’ 以a结尾的数据
‘a%’ 以a开头的数据
‘%a%’ 含有a的数据
‘_a_’ 三位且中间字母是a的
‘_a’ 两位且结尾字母是a的
‘a_’ 两位且开头字母是a的
通过 \转义出 _
语法:
--选取表的某某列满足条件的数据
SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern;
in(设多值)
允许您在 WHERE 子句中规定多个值
语法:
--选取表的某某列满足条件的数据
SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...);
between(介于)
用于选取介于两个值之间的数据范围内的值
语法:
--选取表的某某列介于两个值之间的数据范围内的值的数据
SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2;
--选取表的某某列不介于两个值之间的数据范围内的值的数据
SELECT column_name(s) FROM table_name WHERE column_name NOT BETWEEN value1 AND value2;
别名
可以为表名称或列名称指定别名
语法:
--列的 SQL 别名语法
SELECT column_name AS alias_name FROM table_name;
--表的 SQL 别名语法
SELECT column_name(s) FROM table_name AS alias_name;
注意:如果列名称包含空格,要求使用双引号或方括号:
最佳使用别名的情况:
- 在查询中涉及超过一个表
- 在查询中使用了函数
- 列名称很长或者可读性差
- 需要把两个列或者多个列结合在一起