基础指令

  • 数据操作语言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