SQL基础
SQL基础问题
关于SQL的一些概念问题
什么是SQL?
- SQL 指结构化查询语言(Structured query language)
- 用于访问和处理数据库的标准的计算机语言。
- 是一种ANSI(美国国家标准化组织)的标准计算机语言。
- 用于管理关系数据库管理系统(RDBMS)。
什么是数据库?
是以一定方式储存在一起、能予多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。
什么是数据库管理系统(DBMS)?
是为管理数据库而设计的电脑软件系统,一般具有存储、截取、安全保障、备份等基础功能。
数据库管理系统有哪些?
-
关系数据库
-
是创建在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
-
典型代表:MySQL、Oracle、SQL Server、Access等。
-
-
非关系型数据库(NoSQL)
-
键值(Key-Value)存储数据库
- 主要是使用一个哈希表,表中有一个特定的键和一个指针指向特定的数据。
- 优势:可以通过Hash码快速查询到value,并且能够应对高并发。
- 主要产品:Redis、MemcacheDB、Memcached等。
-
列存储(Column-oriented)数据库
- 又称为面向可扩展性的分布式数据库,它反转了传统的行存储数据库。将存储结构按照列进行存储。
- 典型产品:Hbase,大数据存储使用较多。
-
-
面向文档数据库
- 也属于非关系型数据库,主要是将半结构化数据存储为XML、YAML、JSON、BSON、office等格式的文档。相互之间不再有联系
- 典型应用:MongoDB、CouchDB。
数据库的架构是什么样子的?
数据库架构一般分为三层:
- 内层:最接近实际存储体,亦即有关数据的实际存储方式。
- 外层:最接近用户,即有关个别用户观看数据的方式。
- 概念层:介于两者之间的间接层。
关系型数据库中所谓的“关系”是指什么?
-
关系型数据库中的关系,主要是指“关系模型”;
-
关系模型是指用二维表的形式表示实体和实体间联系的数据模型。
-
关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成。
-
关系数据结构是指一种二维的逻辑结构,说白了就是二维表,关系数据结构的重点在于
实体
和关系
的选择。
关于SQL的基础语法
CREATE & DROP
-- 创建数据库(mysql里不叫数据库,叫schema)
CREATE DATABASE [database_name];
-- 删除数据库
DROP DATABASE [database_name];
-- 创建表
CREATE TABLE [table_name]
(
[column_name1] [type1],
[column_name2] [type2],
[column_name3] [type3],
....
)
-- 删除表
DROP TABLE [table_name];
-- 清空表
TRUNCATE TABLE [table_name];
-- 创建索引
CREATE INDEX [index_name] ON [table_name] ([column_name])
-- 添加索引
ALTER table [table_name] ADD INDEX [index_name]([column_name])
-- 删除索引
-- mysql
ALTER TABLE [table_name] DROP INDEX [index_name];
-- sql server
DROP INDEX [table_name].[index_name];
-- Oracle
DROP INDEX [index_name]
SELECT
select
是最基础的查询语句
select [column_name]
from [table_name]
DISTINCT
distinct
用于返回唯一不同的值,就是去重。
select distinct [column_name]
from [table_name]
WHERE
where
是查询的条件
select [column_name]
from [table_name]
where [conditions(column operator value)]
AND & OR
在where
中吧两个或多个条件结合起来。
select [column_name]
from [table_name]
where ([condition A] and [condition B]) or [condition C]
ORDER BY
ORDER BY
语句用于根据指定的列对结果集进行排序。默认为升序排序,需要降序排序的话可以使用DESC
。
SELECT [column_name(s)]
FROM [table_name(s)]
ORDER BY [column_name] <<[DESC]>>
INSERT INTO
用于插入语句,向表中插入新的行
insert into [table_name] ([column1], [column2], ...)
values ([value1], [value2], ...)
UPDATE
用于修改表中的数据
update [table_name]
set [column_name1] = [new_value1], [column_name2] = [new_value2], ...
where [column_name3] = [new_value3], [column_name4] = [new_value4], ...
DELETE
用于删除表中的行
delete
from [table_name]
where [column_name1] = [new_value1], [column_name2] = [new_value2], ...
ALTER
alter table
语句用来在已有的表中添加、修改或删除列。
--在表中添加列
ALTER TABLE [table_name]
ADD [column_name] [data_type]
--删除表中的列
ALTER TABLE [table_name]
DROP COLUMN [column_name]
--修改表中的列
ALTER TABLE [table_name]
ALTER COLUMN [column_name] [data_type]
NULL/IS NULL/IS NOT NULL
null
值代表空,和零不等价。
判断是否为null
不能用
[column_name] = null
而是
[column_name] is null
– –或者是
[column_name] is not null
关于SQL的进阶语法
TOP/LIMIT/ROWNUM
mysql的limit
和sql server的top
、Oracle的rownum
作用相同,都是选出筛选记录中的前n条记录。
-- sql server用法
SELECT TOP [number|percent] [column_name(s)] FROM [table_name(s)] --sql server可以用百分比具体用法如50%,即
select top 50 percent [column_name(s)]
from [table_name(s)]
-- mysql用法
select [column_name(s)]
from [table_name(s)]
limit [number] --注意:limit后只能跟一个具体值,而不能是算式
-- Oracle用法
SELECT [column_name(s)]
FROM [table_name(s)]
WHERE ROWNUM <= [number]
LIKE
like
是用于搜索指定模式的,坦白的讲就是模糊匹配
SELECT [column_name(s)]
FROM [table_name(s)]
WHERE [column_name] LIKE [pattern], ...
-- 这个[pattern]就是通配符
通配符
通配符就是进行模糊匹配的利器,一般和like搭配使用,日常使用的通配符有如下四种
通配符 | 描述 |
---|---|
% | 代替一个或多个字符 |
_ | 只能代替一个字符 |
[charlist] (比如[ABC]代表包含“A”、“B”或“C”中的任意一个) | 字符列中的任何一个单一字符 |
[!charlist] or [^charlist] (比如[!ABC]代表不含“A”、“B”或“C”中的任意一个) | 不在字符列中的任一单一字符 |
IN
in
值规定了在where
子句中一个[column_name]可以对应多个值。
SELECT [column_name(s)]
FROM [table_name(s)]
WHERE [column_name] IN ([value1],[value2],...)
BETWEEN…AND
between
往往和and
搭配使用,用来选取两者之间的数据范围。这些数据可以是数值、文本或者日期
-- 正常数值用法,文本和日期雷同,文本之间的含义是字母顺序之间,不同的数据库会有不同的差异,还有个小技巧,如果要选中范围之外的可以在BETWEEN之前加一个NOT
SELECT [column_name(s)]
FROM [table_name(s)]
WHERE [column_name] <<[NOT]>> BETWEEN [value1] AND [value2], ...
ALIAS(别名)
Alias并不是一个关键字,这里介绍的是为表或者列起一个别名(绰号),是查询结果更加易读。
-- 给表添加别名
SELECT [column_name(s)]
FROM [table_name] AS [alias_name], ...
-- 给列添加别名
SELECT [column_name] AS [alias_name], ...
FROM [table_name(s)]
-- 但是实际上,似乎好像?给列添加别名可以省去[AS]? 表的没有尝试过,但是列的是可以的
JOIN/INNER JOIN/LEFT JOIN/RIGHT JOIN
join
是一个连接的问题,包括内连接,外连接,左连接和右连接,具体的作用如下:
inner join
:内连接,如果表中有至少一个匹配,则返回行。join
:连接,和inner join
相同。left join
:左连接,即使右表中没有匹配,也从左表返回所有的行。right join
:右连接,即使左表中没有匹配,也从右表返回所有的行。full join
:全连接,只要其中一个表中存在匹配,则返回行。
- 具体的使用上图已经表达的很清楚了,需要注意的是
on
和where
并不冲突。
UNION和UNION ALL
UNION
操作符用于合并两个或多个 SELECT
语句的结果集。(说实话,这玩意几乎用不上)
注意:UNION
内部的 SELECT
语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT
语句中的列的顺序必须相同。
-- union
SELECT [column_name(s)] FROM [table_name1]
UNION
SELECT [column_name(s)] FROM [table_name2]
-- union all(使用方式相同,作用上仅仅是允许重复)
SELECT INTO
select into
语句从一个表中选取数据,然后把数据插入另一个表中。常用于创建表的备份附件或者用于对记录进行存档。
-- 制作表的备份附件,in 子句用于向另一个数据库中拷贝表
SELECT [column_name(s)]
INTO [new_table_name] <<IN [externaldatabase]>>
FROM [old_tablename]
AUTO INCREMENT
执行自动任务,比如生成自加字段作为主键。
--mysql
create table [table_name](
[column_name1] [type1] [constraint1] auto_increment, --默认开始值是1,每条记录递增1.
[column_name2] [type2] [constraint2],
...
);
--以其他值开始
alter table [table_name] auto_increment = n;
-- sql server
create table [table_name](
[column_name1] [type1] [constraint1] identity(m,n), --开始值是m,每条记录递增n.
[column_name2] [type2] [constraint2],
...
);
关于SQL的约束
CHECK
CHECK 约束用于限制列中的值的范围。
如果对单个列定义 CHECK 约束,那么该列只允许特定的值。
如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。
-- mysql
create table [table_name](
[column_name1] [type1] [constraint1],
[column_name2] [type2] [constraint2],
...
check([condition(column operator value)])
);
-- sql server/oracle
create table [table_name](
[column_name1] [type1] [constraint1] check([condition(column operator value)]),
[column_name2] [type2] [constraint2],
...
);
--为多个列定义check,并且明明check约束
create table [table_name](
[column_name1] [type1] [constraint1],
[column_name2] [type2] [constraint2],
...
constraint [check_name] check([condition1(column operator value)] and / or [condition2(column operator value)])
);
--如果在表已经存在的情况下添加check约束
alter table [table_name]
add check([condition(column operator value)]);
--如果在表已经存在的情况下添加多个check约束
alter table [table_name]
add constraint [check_name] check([condition1(column operator value)] and / or [condition2(column operator value)]);
--撤销check约束
--sql server/oracle
alter table [table_name]
drop constraint [check_name]
-- mysql
alter table [table_name]
drop [check_name]
DEFAULT
用于向列中插入默认值
create table [table_name](
[column_name1] [type1] [constraint1],
[column_name2] [type2] [constraint2] default [value],
...
);
-- 也可以通过使用类似GETDATE()这样的函数来插入系统值
create table [table_name](
[column_name1] [type1] [constraint1],
[column_name2] [type2] [constraint2] default GETDATE(),
...
);
-- 对已存在的情况下添加DEFAULT约束
--mysql
ALTER TABLE [table_name]
ALTER [column_name] SET DEFAULT [value]
-- sql server/oracle
ALTER TABLE [table_name]
ALTER columns [column_name] SET DEFAULT [value]
--撤销约束
-- mysql
ALTER TABLE [table_name]
ALTER [column_name] DROP DEFAULT
-- sql server/oracle
ALTER TABLE [table_name]
ALTER columns [column_name] DROP DEFAULT
NOT NULL
不接受空值
create table [table_name](
[column_name1] [type1] [constraint1],
[column_name2] [type2] [constraint2] not null,
...
);
UNIQUE
唯一标识,提供唯一性保证,PRIMARY KEY
也提供了唯一性保证,并且其拥有自动定义的unique
,但是一个表可以有多个unique
但是只能有一个PRIMARY KEY
。
-- mysql
create table [table_name](
[column_name1] [type1] [constraint1],
[column_name2] [type2] [constraint2],
...
unique([column_name1])
);
--sql server/oracle
create table [table_name](
[column_name1] [type1] [constraint1],
[column_name2] [type2] [constraint2] unique,
...
);
--需要给约束添加名字,并列多个约束
CONSTRAINT [unique_name] UNIQUE ([column_name(s)])
--如果表已经创建,添加约束
ALTER TABLE [table_name]
ADD UNIQUE ([column_name])
--需要给约束添加名字
ALTER TABLE [table_name]
ADD CONSTRAINT [unique_name] UNIQUE ([column_name(s)])
-- 撤销约束
--mysql
ALTER TABLE [table_name]
DROP INDEX [unique_name]
-- sql server/oracle
ALTER TABLE [table_name]
DROP CONSTRAINIT [unique_name]
PRIMARY KEY
主键,一个表只能由一个主键,主键必须包含唯一的值,并且不能为null值。
-- mysql
create table [table_name](
[column_name1] [type1] [constraint1],
[column_name2] [type2] [constraint2],
...
PRIMARY key([column_name1])
);
-- sql server/oracle
create table [table_name](
[column_name1] [type1] [constraint1] PRIMARY KEY,
[column_name2] [type2] [constraint2],
...
);
-- 对于已经存在的表添加主键约束
ALTER TABLE [table_name]
ADD PRIMARY KEY ([column_name])
--添加约束并命名
ALTER TABLE [table_name]
ADD CONSTRAINT [constraint_name] PRIMARY KEY ([column_name(s)])
--撤销主键约束
--mysql
ALTER TABLE [table_name]
DROP PRIMARY KEY
--sql server/oracle
ALTER TABLE [table_name]
DROP CONSTRAINT [constraint_name]
FOREIGN KEY
外键约束,一个表中的foreign key
指向另一个表中的primary key
。
create table [table_name](
[column_name1] [type1] [constraint1],
[column_name2] [type2] [constraint2],
...
foreign key ([column_name1]) references [table_name1]([column_name3])
);
--需要命名外键约束,以及为多个列定义约束
create table [table_name](
[column_name1] [type1] [constraint1],
[column_name2] [type2] [constraint2],
...
constraint [foreign_key_name] foreign key ([column_name1]) references [table_name1]([column_name3])
);
--表已经存在
ALTER TABLE [table_name]
ADD FOREIGN KEY ([column_name])
REFERENCES [table_name1]([column_name3]);
--需要命名外键约束,以及为多个列定义约束
ALTER TABLE [table_name]
ADD CONSTRAINT [foreign_key_name]
FOREIGN KEY ([column_name])
REFERENCES [table_name1]([column_name3]);
--撤销外键
--mysql
ALTER TABLE [table_name]
DROP FOREIGN KEY [foreign_key_name]
--sql server/oracle
ALTER TABLE [table_name]
DROP CONSTRAINT [foreign_key_name]
关于SQL的函数
Date函数
用来获取各种各样的日期、时间等。
常用的函数:
—mysql
函数 描述 NOW() 返回当前的日期和时间 CURDATE() 返回当前的日期 CURTIME() 返回当前的时间 DATE() 提取日期或日期/时间表达式的日期部分 EXTRACT() 返回日期/时间按的单独部分 DATE_ADD() 给日期添加指定的时间间隔 DATE_SUB() 从日期减去指定的时间间隔 DATEDIFF() 返回两个日期之间的天数 DATE_FORMAT() 用不同的格式显示日期/时间 —sql server
函数 描述 GETDATE() 返回当前日期和时间 DATEPART() 返回日期/时间的单独部分 DATEADD() 在日期中添加或减去指定的时间间隔 DATEDIFF() 返回两个日期之间的时间 CONVERT() 用不同的格式显示日期/时间 DATE数据类型
——mysql
- DATE - 格式 YYYY-MM-DD
- DATETIME - 格式: YYYY-MM-DD HH:MM:SS
- TIMESTAMP - 格式: YYYY-MM-DD HH:MM:SS
- YEAR - 格式 YYYY 或 YY
——sql server
- DATE - 格式 YYYY-MM-DD
- DATETIME - 格式: YYYY-MM-DD HH:MM:SS
- SMALLDATETIME - 格式: YYYY-MM-DD HH:MM:SS
- TIMESTAMP - 格式: 唯一的数字
ISNULL()函数/NVL()函数/IFNULL()函数/COALESCE()函数
在我们需要用到null这一列的值时,将null转化为0使用,就会用到isnull()
函数。
ISNULL(param, 0) --当参数为null时,返回0
NVL(param, 0) --因为oracle没有isnull()函数,所以用这个使用方式相同,效果相同
IFNULL(param, 0) --mysql也没有ISNULL(),IFNULL()函数虽然工作方式不同,但是效果相同
COALESCE(param, 0)--也是mysql中的,效果一样
AVG()函数
返回数值列的平均值,不包含null值
select avg([column_name]) as[column_name1]
from [table_name]
COUNT()函数
返回指定列的值的数目,不计算null
select count([column_name]) as [column_name1]
from [table_name]
-- count()函数括号里还可以通过加distinct去重
FIRST()函数
返回指定的字段中第一个记录的值。
tips:可使用order by对记录进行排序使用
SELECT FIRST([column_name])
FROM [table_name]
LAST()函数
返回指定的字段中最后一个记录的值。
tips:可使用order by对记录进行排序使用
SELECT LAST([column_name])
FROM [table_name]
MAX()函数
返回一列中的最大值。
SELECT MAX([column_name])
FROM [table_name]
MIN()函数
返回一列中的最小值,不包括null。
SELECT MIN([column_name])
FROM [table_name]
SUM()函数
返回数值列的总数。
SELECT SUM([column_name])
FROM [table_name]
GROUP BY语句
用于结合合计函数(比如sum()),根据一个或多个对结果进行分组
SELECT SUM([column_name])
FROM [table_name]
GROUP BY [column_name]
这个语句确实有点较难理解,举个例子:
有如下表:
学生表(Student)
Sno | Sname | Ssex | Sage | Smajor |
---|---|---|---|---|
S0001 | 陈憨憨 | female | 20 | 物联网工程 |
S0002 | 赵铁柱 | female | 21 | 物联网工程 |
S0003 | 王二狗 | male | 19 | 物联网工程 |
课程表(Course)
Cno | Cname | Cteacher |
---|---|---|
C0001 | C语言 | 张三 |
C0002 | 高等数学 | 李四 |
C0003 | 大学英语 | 王五 |
成绩表(Grades)
Sno | Cno | Score |
---|---|---|
S0001 | C0001 | 70 |
S0002 | C0001 | 75 |
S0003 | C0001 | 80 |
S0001 | C0002 | 79 |
S0002 | C0002 | 60 |
S0003 | C0002 | 82 |
S0001 | C0003 | 65 |
S0002 | C0003 | 91 |
S0003 | C0003 | 66 |
现在查询每个同学学号,姓名,总成绩
select Student.Sno, Student.Sname, SUM(Grades.Score) as 'Total Score'
from Grade, Student
where Student.Sno = Grades.Sno
group by Grades.Sno
-- group by也可以对一个以上的列应用,直接在group by后面加就行
HAVING子句
出现having子句的原因是where无法和合计函数一起使用。
比如上面的例子,假如我要查询总成绩大于230的同学学号、姓名和总成绩就无法实现了。用having实现如下
select Student.Sno, Student.Sname, SUM(Grades.Score) as 'Total Score'
from Grade, Student
group by Grade.Sno
having SUM(Grades.Score) > 230;
UCASE()函数B
把字段的值转换为大写。
SELECT ucase([column_name])
FROM [table_name]
LCASE()函数
把字段的值转换为小写。
SELECT lcase([column_name])
FROM [table_name]
MID()函数
用于从文本字段中提取字符
SELECT mid([column_name], [start], [length])
FROM [table_name]
-- 三个参数分别是列名,起始位置,返回的字符长度(这个可以不写默认从起始位置到结束)
LEN()函数
返回文本字段中值的长度
SELECT len([column_name])
FROM [table_name]
--就是返回这一列的每个值的length
ROUND()函数
用于把数值字段舍入为指定的小数位数。
SELECT len([column_name], [decimals])
FROM [table_name]
--第一个参数是列名,第二个是返回的小数位数
NOW()函数
返回当前的日期和时间。
SELECT now()
FROM [table_name]
FORMAT()函数
用于对字段的显示进行格式化。
SELECT format([column_name], [format])
FROM [table_name]
--第一个参数是列名,第二个是格式,比如
SELECT ProductName, UnitPrice, FORMAT(Now(),'YYYY-MM-DD')
FROM Products
关于SQL的数据类型(mysql)
text类型
数据类型 | 描述 |
---|---|
CHAR(size) | 保存固定长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的长度。最多 255 个字符。 |
VARCHAR(size) | 保存可变长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的最大长度。最多 255 个字符。注释:如果值的长度大于 255,则被转换为 TEXT 类型。 |
TINYTEXT | 存放最大长度为 255 个字符的字符串。 |
TEXT | 存放最大长度为 65,535 个字符的字符串。 |
BLOB | 用于 BLOBs (Binary Large OBjects)。存放最多 65,535 字节的数据。 |
MEDIUMTEXT | 存放最大长度为 16,777,215 个字符的字符串。 |
MEDIUMBLOB | 用于 BLOBs (Binary Large OBjects)。存放最多 16,777,215 字节的数据。 |
LONGTEXT | 存放最大长度为 4,294,967,295 个字符的字符串。 |
LONGBLOB | 用于 BLOBs (Binary Large OBjects)。存放最多 4,294,967,295 字节的数据。 |
ENUM(x,y,z,etc.) | 允许你输入可能值的列表。可以在 ENUM 列表中列出最大 65535 个值。如果列表中不存在插入的值,则插入空值。注释:这些值是按照你输入的顺序存储的。可以按照此格式输入可能的值:ENUM('X','Y','Z') |
SET | 与 ENUM 类似,SET 最多只能包含 64 个列表项,不过 SET 可存储一个以上的值。 |
number类型
数据类型 | 描述 |
---|---|
TINYINT(size) | -128 到 127 常规。0 到 255 无符号*。在括号中规定最大位数。 |
SMALLINT(size) | -32768 到 32767 常规。0 到 65535 无符号*。在括号中规定最大位数。 |
MEDIUMINT(size) | -8388608 到 8388607 普通。0 to 16777215 无符号*。在括号中规定最大位数。 |
INT(size) | -2147483648 到 2147483647 常规。0 到 4294967295 无符号*。在括号中规定最大位数。 |
BIGINT(size) | -9223372036854775808 到 9223372036854775807 常规。0 到 18446744073709551615 无符号*。在括号中规定最大位数。 |
FLOAT(size,d) | 带有浮动小数点的小数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。 |
DOUBLE(size,d) | 带有浮动小数点的大数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。 |
DECIMAL(size,d) | 作为字符串存储的 DOUBLE 类型,允许固定的小数点。 |
- 这些整数类型拥有额外的选项 UNSIGNED。通常,整数可以是负数或正数。如果添加 UNSIGNED 属性,那么范围将从 0 开始,而不是某个负数。
date类型
数据类型 | 描述 |
---|---|
DATE() | 日期。格式:YYYY-MM-DD注释:支持的范围是从 '1000-01-01' 到 '9999-12-31' |
DATETIME() | *日期和时间的组合。格式:YYYY-MM-DD HH:MM:SS注释:支持的范围是从 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59' |
TIMESTAMP() | *时间戳。TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 至今的描述来存储。格式:YYYY-MM-DD HH:MM:SS注释:支持的范围是从 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC |
TIME() | 时间。格式:HH:MM:SS 注释:支持的范围是从 '-838:59:59' 到 '838:59:59' |
YEAR() | 2 位或 4 位格式的年。注释:4 位格式所允许的值:1901 到 2155。2 位格式所允许的值:70 到 69,表示从 1970 到 2069。 |
- 即便 DATETIME 和 TIMESTAMP 返回相同的格式,它们的工作方式很不同。在 INSERT 或 UPDATE 查询中,TIMESTAMP 自动把自身设置为当前的日期和时间。TIMESTAMP 也接受不同的格式,比如 YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD 或 YYMMDD。
语法快速查找表
语句 | 语法 |
---|---|
AND / OR | SELECT column_name(s) FROM 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 FROM table_name |
AS (alias for table) | SELECT column_name FROM table_name AS table_alias |
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 data_type, ....... ) |
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 (Note: Deletes the entire table!!)orDELETE FROM table_name WHERE condition |
DROP DATABASE | 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,....)orINSERT INTO table_name (column_name1, column_name2,...) 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 (used to create backup copies of tables) | SELECT * INTO new_table_name FROM original_table_nameorSELECT column_name(s) INTO new_table_name FROM original_table_name |
TRUNCATE TABLE (deletes only the data inside the table) | TRUNCATE TABLE table_name |
UPDATE | UPDATE table_name SET column_name=new_value [, column_name=new_value] WHERE column_name=some_value |
WHERE | SELECT column_name(s) FROM table_name WHERE condition |
Q.E.D.