SQL语句(不区分大小的语言)
-
基础
-
创建数据库
CREATE DATABASE database-name
CREATE TABLE 语句用于创建数据库中的表
CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
…
);
column_name 参数规定表中列的名称。
data_type 参数规定列的数据类型(例如 varchar、integer、decimal、date 等等)。
size 参数规定表中列的最大长度
-
约束
-
语法
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,
…
);
- NOT NULL - 指示某列不能存储 NULL 值。
- UNIQUE - 保证某列的每行必须有唯一的值。
- PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
- FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
- CHECK - 保证列中的值符合指定的条件。
- DEFAULT - 规定没有给列赋值时的默认值。
-
-
-
删除数据库
drop database dbname
-
备份sql server
-
创建 备份数据的 device
USE master
EXEC sp_addumpdevice ‘disk’, ‘testBack’, ‘c:\mssql7backup\MyNwind_1.dat’
-
开始备份
BACKUP DATABASE pubs TO testBack
-
-
select语句(用于从数据库中选取数据结果被存储在一个结果表中,称为结果集)
-
语法:
SELECT column_name,column_name
FROM table_name;
与SELECT * FROM table_name;
SELECT DISTINCT 语句(去掉重复值用于返回唯一不同的值)
-
语法:
SELECT DISTINCT column_name,column_name
FROM table_name;
-
-
-
WHERE(用于过滤记录)
-
语法:
SELECT column_name,column_name
FROM table_name
WHERE column_name operator value;
-
运算符
运算符 描述 = 等于 <> 不等于。注释:在 SQL 的一些版本中,该操作符可被写成 != > 大于 < 小于 <= 小于等于 >= 大于等于 BETWEEN 在某个范围内 LINK 搜索某种模式 IN 指定针对某个列的多个可能值
-
-
AND & OR(用于基于一个以上的条件对记录进行过滤)
如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。
-
ORDER BY
-
对结果集按照一个列或者多个列进行排序
-
语法
SELECT column_name,column_name
FROM table_name
ORDER BY column_name,column_name ASC|DESC;
ASC升序
DESC降序
-
当多个列排序时,先按照第一个列排序,然后再依次从后拍。
-
-
INSERT INTO
-
向表中插入新记录
-
语法
第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:
INSERT INTO table_name
VALUES (value1,value2,value3,…);
第二种形式需要指定列名及被插入的值:
INSERT INTO table_name (column1,column2,column3,…)
VALUES (value1,value2,value3,…);
-
-
UPDATE(更新表中的记录)
-
语法:
UPDATE table_name
SET column1=value1,column2=value2,…
WHERE some_column=some_value;
(若没有where则更新全部记录)
-
-
DELETE(删除表中的记录)
-
语法:
DELETE FROM table_name
WHERE some_column=some_value;
-
-
SELECT TOP, LIMIT, ROWNUM 子句(用于规定要返回的记录的数目)
-
SQL Server / MS Access 语法
SELECT TOP number|percent column_name(s)
FROM table_name;
-
MySQL 语法
SELECT column_name(s)
FROM table_name
LIMIT number;
-
Oracle 语法
SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number;
-
-
-
操作符
- LIKE(在 WHERE 子句中搜索列中的指定模式)
-
语法:
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;
-
- LIKE(在 WHERE 子句中搜索列中的指定模式)
-
通配符
-
通配符 描述 % 替代 0 个或多个字符 _ 替代一个字符 [charlist] 字符列中的任何单一字符 [charlist]或[charlist] 不在字符列中的任何单一字符 -
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;
-
-
别名(通过使用 SQL,可以为表名称或列名称指定别名。)
-
列
SELECT column_name AS alias_name
FROM table_name;
-
表
SELECT column_name(s)
FROM table_name AS alias_name;
-
-
链接(JOIN)
-
把来自两个或多个表的行结合起来
-
INNER JOIN:如果表中有至少一个匹配,则返回行
-
LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
-
RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
-
FULL OUTER JOIN:只要其中一个表中存在匹配,则返回行
-
实例
SELECT Websites.id, Websites.name, access_log.count, access_log.date
FROM Websites
INNER JOIN access_log
ON Websites.id=access_log.site_id;
-
-
UNION :合并两个或多个 SELECT 语句的结果。
-
语法
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
-
-
SELECT INTO :从一个表复制数据,然后把数据插入到另一个新表中
-
复制所有的列插入到新表中
SELECT *
INTO newtable [IN externaldb]
FROM table1;
只复制希望的列插入到新表中:
SELECT column_name(s)
INTO newtable [IN externaldb]
FROM table1;
-
实例
创建 Websites 的备份复件:
SELECT *
INTO WebsitesBackup2016
FROM Websites;
只复制一些列插入到新表中:
SELECT name, url
INTO WebsitesBackup2016
FROM Websites;
只复制中国的网站插入到新表中:
SELECT *
INTO WebsitesBackup2016
FROM Websites
WHERE country=‘CN’;
复制多个表中的数据插入到新表中:
SELECT Websites.name, access_log.count, access_log.date
INTO WebsitesBackup2016
FROM Websites
LEFT JOIN access_log
ON Websites.id=access_log.site_id;
-
-
INSERT INTO SELECT :从一个表复制数据,然后把数据插入到一个已存在的表中
-
语法
从一个表中复制所有的列插入到另一个已存在的表中:
INSERT INTO table2
SELECT * FROM table1;
只复制希望的列插入到另一个已存在的表中:
INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1;
-
-
CREATE INDEX 语句(用于在表中创建索引)
-
语法
创建一个简单的索引。允许使用重复的值
CREATE INDEX index_name
ON table_name (column_name)
创建一个唯一的索引。不允许使用重复的值:唯一的索引意味着两个行不能拥有相同的索引值
CREATE UNIQUE INDEX index_name
ON table_name (column_name)
-
-
DROP INDEX 语句
DROP INDEX 语句用于删除表中的索引
用于 MS Access 的 DROP INDEX 语法:
DROP INDEX index_name ON table_name
用于 MS SQL Server 的 DROP INDEX 语法:
DROP INDEX table_name.index_name
用于 DB2/Oracle 的 DROP INDEX 语法:
DROP INDEX index_name
用于 MySQL 的 DROP INDEX 语法:
ALTER TABLE table_name DROP INDEX index_name
-
ROP TABLE 语句
DROP TABLE 语句用于删除表。
DROP TABLE table_name
- DROP DATABASE 语句
DROP DATABASE 语句用于删除数据库。
DROP DATABASE database_name
- TRUNCATE TABLE 语句
仅仅需要删除表内的数据,但并不删除表本身
TRUNCATE TABLE table_name
-
ALTER TABLE 语句:在已有的表中添加、删除或修改列。
-
语法
在表中添加列
ALTER TABLE table_name
ADD column_name datatype
需删除表中的列
ALTER TABLE table_name
DROP COLUMN column_name
变表中列的数据类型
-
SQL Server / MS Access:
ALTER TABLE table_name
ALTER COLUMN column_name datatype
My SQL / Oracle:
ALTER TABLE table_name
MODIFY COLUMN column_name datatype
-
-
-
Auto-increment :新记录插入表中时生成一个唯一的数字
-
用于 MySQL 的语法
列名 int NOT NULL AUTO_INCREMENT,
让 AUTO_INCREMENT 序列以其他的值起始
- ALTER TABLE Persons AUTO_INCREMENT=100
-
用于 SQL Server 的语法
ID int IDENTITY(1,1) PRIMARY KEY
olumn_name datatypeMy SQL / Oracle:
ALTER TABLE table_name
MODIFY COLUMN column_name datatype
-
-
Auto-increment :新记录插入表中时生成一个唯一的数字
-
用于 MySQL 的语法
列名 int NOT NULL AUTO_INCREMENT,
让 AUTO_INCREMENT 序列以其他的值起始
- ALTER TABLE Persons AUTO_INCREMENT=100
-
用于 SQL Server 的语法
ID int IDENTITY(1,1) PRIMARY KEY
-
-