SQL基础

SQL基础问题

关于SQL的一些概念问题

什么是SQL?

  • SQL 指结构化查询语言(Structured query language)
  • 用于访问和处理数据库的标准的计算机语言。
  • 是一种ANSI(美国国家标准化组织)的标准计算机语言。
  • 用于管理关系数据库管理系统(RDBMS)。

什么是数据库?

是以一定方式储存在一起、能予多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。

什么是数据库管理系统(DBMS)?

是为管理数据库而设计的电脑软件系统,一般具有存储、截取、安全保障、备份等基础功能。

数据库管理系统有哪些?

  1. 关系数据库

    • 是创建在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。

    • 典型代表:MySQL、Oracle、SQL Server、Access等。

  2. 非关系型数据库(NoSQL)

    • 键值(Key-Value)存储数据库

      • 主要是使用一个哈希表,表中有一个特定的键和一个指针指向特定的数据。
      • 优势:可以通过Hash码快速查询到value,并且能够应对高并发。
      • 主要产品:Redis、MemcacheDB、Memcached等。
    • 列存储(Column-oriented)数据库

      • 又称为面向可扩展性的分布式数据库,它反转了传统的行存储数据库。将存储结构按照列进行存储。
      • 典型产品:Hbase,大数据存储使用较多。
  3. 面向文档数据库

    • 也属于非关系型数据库,主要是将半结构化数据存储为XML、YAML、JSON、BSON、office等格式的文档。相互之间不再有联系
    • 典型应用:MongoDB、CouchDB。

数据库的架构是什么样子的?

数据库架构一般分为三层:

  1. 内层:最接近实际存储体,亦即有关数据的实际存储方式。
  2. 外层:最接近用户,即有关个别用户观看数据的方式。
  3. 概念层:介于两者之间的间接层。

关系型数据库中所谓的“关系”是指什么?

  1. 关系型数据库中的关系,主要是指“关系模型”;

  2. 关系模型是指用二维表的形式表示实体和实体间联系的数据模型。

  3. 关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成。

  4. 关系数据结构是指一种二维的逻辑结构,说白了就是二维表,关系数据结构的重点在于实体关系的选择。

关于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是一个连接的问题,包括内连接,外连接,左连接和右连接,具体的作用如下:

  1. inner join:内连接,如果表中有至少一个匹配,则返回行。
  2. join:连接,和inner join相同。
  3. left join:左连接,即使右表中没有匹配,也从左表返回所有的行。
  4. right join:右连接,即使左表中没有匹配,也从右表返回所有的行。
  5. full join:全连接,只要其中一个表中存在匹配,则返回行。

img

  • 具体的使用上图已经表达的很清楚了,需要注意的是onwhere并不冲突。

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)

SnoSnameSsexSageSmajor
S0001陈憨憨female20物联网工程
S0002赵铁柱female21物联网工程
S0003王二狗male19物联网工程

课程表(Course)

CnoCnameCteacher
C0001C语言张三
C0002高等数学李四
C0003大学英语王五

成绩表(Grades)

SnoCnoScore
S0001C000170
S0002C000175
S0003C000180
S0001C000279
S0002C000260
S0003C000282
S0001C000365
S0002C000391
S0003C000366

现在查询每个同学学号,姓名,总成绩

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 / ORSELECT 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
BETWEENSELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2
CREATE DATABASECREATE DATABASE database_name
CREATE INDEXCREATE INDEX index_name ON table_name (column_name)
CREATE TABLECREATE TABLE table_name ( column_name1 data_type, column_name2 data_type, ....... )
CREATE UNIQUE INDEXCREATE UNIQUE INDEX index_name ON table_name (column_name)
CREATE VIEWCREATE VIEW view_name AS SELECT column_name(s) FROM table_name WHERE condition
DELETE FROMDELETE FROM table_name (Note: Deletes the entire table!!)orDELETE FROM table_name WHERE condition
DROP DATABASEDROP DATABASE database_name
DROP INDEXDROP INDEX table_name.index_name
DROP TABLEDROP TABLE table_name
GROUP BYSELECT column_name1,SUM(column_name2) FROM table_name GROUP BY column_name1
HAVINGSELECT column_name1,SUM(column_name2) FROM table_name GROUP BY column_name1 HAVING SUM(column_name2) condition value
INSELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,..)
INSERT INTOINSERT INTO table_name VALUES (value1, value2,....)orINSERT INTO table_name (column_name1, column_name2,...) VALUES (value1, value2,....)
LIKESELECT column_name(s) FROM table_name WHERE column_name LIKE pattern
ORDER BYSELECT column_name(s) FROM table_name ORDER BY column_name [ASC|DESC]
SELECTSELECT column_name(s) FROM table_name
SELECT *SELECT * FROM table_name
SELECT DISTINCTSELECT 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
UPDATEUPDATE table_name SET column_name=new_value [, column_name=new_value] WHERE column_name=some_value
WHERESELECT column_name(s) FROM table_name WHERE condition

Q.E.D.


If you don't come, I will snow.