基础指令
- 数据操作语言DML
- select
- select 列名 from 表名
- select * from 表名
- select distinct 列名 from 表名(返回唯一不同的值)
- select 列名 from 表名 where 列 运算符 值
- =,!=,>,<,>=,<=,between,like
- select 列名 from 表名 where (列1 运算符 值1)and/or (列2 运算符 值2)
- select 列名1, 列名2 from 表名 order by 列名1 DESC, 列名2 ASC
- update
- update 表名 set 列名 = 新值 where 列名 = 某值
- delete
- delete from 表名 where 列名 = 值
- insert into
- insert into 表名 values (值1, 值2,......)
- insert into 表名(列1, 列2,...)values (值1, 值2,...)
- 数据定义语言DDL
- create database
- alter database
- create table
- alter table
- drop table
- create index
- drop index
高级指令
- top,返回记录数目
- sqlserver:select top 显示数目/percent 列名s from 表名
- mysql: select 列名s from 表名 limit 显示数目
- like,搜索列中的指定模式
- select 列名s from 表名 where 列名 like 模式
- 通配符
- '%'代表零个或多个字符或数字
- '_'代表一个字符或数字
- '[charlist]'代表字符列中的任何单一字符
- '[^charlist]'或者'[!charlist]'不在字符列中的任何单一字符
- in,规定多个值
- select 列名s from 表名 where 列名 in (值1, 值2, ...)
- between,取数据范围
- select 列名s from 表名 where 列名 between 值1 and 值2
- select 列名s from 表名 where 列名 not between 值1 and 值2
- as, 为列名和表名指定别称
- select 列名s from 表名 as 表别名
- select 列名 as 列别名 from 表名
- join, 表连接
- select 表1.列1,表2.列2 from 表1,表2 where 表1.列名 = 表2.列名等价于select 表1.列1,表2.列2 from 表1 inner join 表2 on 表1.列名 = 表2.列名
- inner join,至少一个匹配,则返回行
- select 列名s from 表1 inner join 表2 on 表1.列名=表2.列名
- left join, 即使右表中没有匹配,也从左表中返回所有的行
- right, 即使左表中没有匹配,也从右表中返回所有的行
- full join, 只要其中一个表中存在匹配,就返回行
- union, 合并两个或多个select的结果集
- select 列名s from 表1 union select 列名s from 表2union只会选取不同的值
- select 列名s from 表1 union all select 列名s from 表2union all会列出所有的值
- select into,从一个表中选取数据,然后把数据插入到另一个表中
- select 列名s/* into 新表名 [in 外部数据库] from 旧表名
- create database 数据库名字
- create table 表名(列名称 数据类型,列名称 数据类型,...)
- integer(size), int(size), smallint(size), tinyint(size) 整数
- decimal(size,d), numeric(size,d) 带小数的数字
- char(size) 固定长度的字符串
- varchar(size) 可变长度的字符串
- date(yyyymmdd), 日期
- SQL约束
- NOT NULL 约束强制列不接受 NULL 值
- Id_P int NOT NULL,
- UNIQUE 约束唯一标识数据库表中的每条记录
- CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
- PRIMARY KEY 约束唯一标识数据库表中的每条记录
- PRIMARY KEY (Id_P)
- FOREIGN KEY 约束 一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY
- CHECK 约束用于限制列中的值的范围
- 对单个列定义 CHECK 约束,那么该列只允许特定的值
- CHECK (Id_P>0)
- CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')
- ALTER TABLE Persons ADD CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')
- ALTER TABLE Persons DROP CHECK chk_Person
- 对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制
- DEFAULT 约束用于向列中插入默认值
- City varchar(255) DEFAULT 'Sandnes'
- OrderDate date DEFAULT GETDATE()
- ALTER TABLE Persons ALTER City SET DEFAULT 'SANDNES'
- ALTER TABLE Persons ALTER City DROP DEFAULT
- CREATE INDEX 语句用于在表中创建索引
- CREATE INDEX 索引名称 ON 表名称 (列名称)
- CREATE UNIQUE INDEX 索引名称 ON 表名称 (列名称)
- CREATE INDEX Index_Pers ON Person (LastName, FirstName)
- CREATE INDEX Index_Pers ON Person (LastName DESC)
- DROP 语句删除索引、表和数据库
- DROP TABLE 表名称
- DROP DATABASE 数据库名称
- truncate table 表名称(仅仅删除表内容)
- ALTER TABLE 表名称 DROP INDEX 索引名称 (MySql)
- ALTER TABLE 语句用于在已有的表中添加、修改或删除列
- ALTER TABLE 表名 ADD 列名 数据类型
- alter table 表名 drop column 列名称
- alter table 表名 alter column 列名 数据类型(修改数据类型)
- Auto-increment 会在新记录插入表中时生成一个唯一的数字
- P_Id int NOT NULL AUTO_INCREMENT,
- view 视图 基于SQL语句的结果集的可视化的表
- create view 视图名称 as select 列名s from 表名 where 条件
- create view [Category Sales For 1997] as select distinct CategoryName, Sum(ProductSales) as CategorySales from [Product Sales for 1997] group by CategoryName
- replace view 视图名称 as select 列名s from 表名 where 条件
- drop view 视图名称
- (MYSQL) Date函数
- now() 返回当前的日期和时间
- curdate() 返回当前的日期
- curtime() 返回当前的时间
- date() 提取日期或日期/时间表达式的日期部分
- extract() 返回日期/时间按的单独部分
- date_add() 给日期添加指定的时间间隔
- date_sub 从日期减去指定的时间间隔
- datediff() 返回两个日期之间的天数
- date_format() 用不同的格式显示日期/时间
- (MYSQL) Date数据类型
- date - 格式 YYYY-MM-DD
- datetime - 格式 YYYY-MM-DD HH:MM:SS
- timestamp - 格式 YYYY-MM-DDHH:MM:SS
- year - 格式 YYYY 或 YY
- NULL值
- SELECT LastName,FirstName,Address FROM PersonsWHERE Address IS NULL
- SELECT LastName,FirstName,Address FROM PersonsWHERE Address IS NOT NULL
- MySQL数据类型
- Text类型
- char(size) 保存固定长度的字符串,最多255个字符
- varchar(size) 保存可变长度的字符串,最多255个字符
- tinytext 存放最大长度为255个字符的字符串
- text 存放最大长度为65535个字符的字符串
- blob 用于BLOBs(Binary Large OBjects), 存放最多65535字节的数据
- mediumtext 存放最大长度为16777215个字符的字符串
- mediumblob 存放最大长度为16777215个字符的字符串
- longtext 存放最大长度为4294967295个字符的字符串
- longblob 存放最大长度为4294967295个字符的字符串
- enum(x,y,z,etc.) 允许你输入可能值的列表
- set 与enum类似,set最多只能包含64个列表项,不过set可存储一个以上的值
- Number类型
- tinyint(size) -128到127常规。0到255无符号*
- smallint(size) -32768到32767常规。0到65535无符号*
- mediumint(size) -8388608到8388607常规。0到16777215无符号*
SQL函数
- Aggregate函数(合计函数)操作面向一系列的值,并返回一个单一的值。
- avg()
- select avg(列名) from 表名
- select avg(OrderPrice) as OrderAverage from Orders
- select Customer from Orders where OrderPrice > (select avg(OrderPrice) from Orders)
- count() 返回匹配指定条件的行数
- select count(列名) from 表名
- select count(Customer) as CustomerNilsen from Orders where Customer='Carter'
- select count(*) from 表名
- select count(*) as NumberOfOrders from Orders
- select count(distinc 列名) from 表名
- select count(distinct Customer) as NumberOfCustomers from Orders
- first()返回指定的字段中第一个记录的值
- select first(列名) from 表名
- select first(OrderPrice) as FirstOrderPrice from Orders
- last() 返回指定的字段中最后一个记录的值
- select last(列名) from 表名
- select last(OrderPrice) as LastOrderPrice from Orders
- max() 返回一列中的最大值
- select max(列名) from 表名
- select max(OrderPrice) as LargestOrderPrice from Orders
- 注:也可用于文本列,以获得按字母顺序排列的最高或最低值
- min() 返回一列中的最小值
- select min(列名) from 表名
- select min(OrderPrice) as SmallestOrderPrice from Orders
- sum() 返回数值列的总数(总额)
- select sum(列名) from 表名
- select sum(OrderPrice) as OrderTotal from Orders
- 合计函数需要添加group by语句
- select 列名, 合计函数(列名) from 表名 where 列的计算值 group by 列名
- select Customer, sum(OrderPrice) from Orders group by Customer
- having子句
- where关键字无法与合计函数一起使用
- select 列名,合计函数(列名) from 表名 where 列的计算值 group by 列名 having 合计函数(列名)的计算值
- select Customer, sum(OrderPrice) from Orders group by Customer having sum(OrderPrice)<2000
- select Customer, sum(OrderPrice) from Orders where Customer='Bush' or 'Adams' group by Customer having sum(OrderPrice)>1500
- Scalar函数操作面向某个单一的值,并返回基于输入值的一个单一的值。
- ucase()函数 把字段的值转换为大写
- select ucase(列名) from 表名
- select ucase(LastName) as LastName, FirstName from Persons
- lcase()函数把字段的值转换为小写
- select lcase(列名) from 表名
- select lcase(LastName) as LastName, FirstName from Person
- mid()函数用于从文本字段中提取字符
- select mid(列名,start[,length]) from 表名
- select mid(City, 1, 3) as SmallCity from Persons
- len()函数返回文本字段中值的长度
- select len(列名) from 表名
- select len(City) as LengthOfCity from Persons
- round()函数用于把数值字段舍入为指定的小数位数
- select round(列名,小数位数) from 表名
- select ProductName, round(UnitPrice, 0) as UnitPrice from Products
- now()函数返回当前的日期和时间
- select now() from 表名
- select ProductName, UnitPrice, now() as PerDate from Products
- format()函数用于对字段的显示进行格式化
- select format(列名,规定格式) from 表名
- select ProductName, UnitPrice, format(now(), 'YYYY-MM-DD') as PerDate from Products
快速参考
- AND/OR
- SELECT column_name(s) FORM table_name WHERE condition AND|OR condition
- ALTER TABLE(add column)
- ALTER TABLE table_name ADD column_name datatype
- ALTER TABLE(drop column)
- ALTER TABLE table_name DROP COLUMN column_name
- AS(alias for column)
- SELECT column_name AS column_alias FORM table_name
- BETWEEN
- SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2
- CREATE DATABASE
- CREATE DATABASE database_name
- CREATE INDEX
- CREATE INDEX index_name ON table_name(column_name)
- CREATE TABLE
- CREATE TABLE table_name(column_name1 data_type, column_name2 datatype,......)
- CREATE UNIQUE INDEX
- CREATE UNIQUE INDEX index_name ON table_name(column_name)
- CREATE VIEW
- CREATE VIEW view_name AS SELECT column_name(s) FROM table_name WHERE condition
- DELETE FROM
- DELETE FROM table_name
- DELETE FROM table_name WHERE condition
- DROP DARABASE
- DROP DATABASE database_name
- DROP INDEX
- DROP INDEX table_name.index_name
- DROP TABLE
- DROP TABLE table_name
- GROUP BY
- SELECT column_name1, SUM(column_name2) FROM table_name GROUP BY column_name1
- HAVING
- SELECT column_name1, SUM(column_name2) FROM table_name GROUP BY column_name1 HAVING SUM(column_name2) condition value
- IN
- SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...)
- INSERT INTO
- INSERT INTO table_name VALUES(value1, value2,...)
- INSERT INTO table_name (column_name1, column_name2, column_name3,...) VALUES(value1,value2,...)
- LIKE
- SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern
- ORDER BY
- SELECT column_name(s) FROM table_name ORDER BY column_name [ASC|DESC]
- SELECT
- SELECT column_name(s) FROM table_name
- SELECT*
- SELECT * FROM table_name
- SELECT DISTINCT
- SELECT DISTINCT column_name(s) FROM table_name
- SELECT INTO
- SELECT * INTO new_table_name FROM original_table_name
- TRUNCATE TABLE
- TRUNCATE TABLE table_name
- UPDATE
- UPDATE table_name SET column_name = new_value [,column_name = new_vale] WHERE column_name=some_value
- WHERE
- SELECT column_name(s) FROM table_name WHERE condition