不同值,作用于所有列
比如,table表长下面这样
A | B | C |
---|---|---|
1 | 2 | 1 |
1 | 3 | 1 |
1 | 2 | 2 |
select distinct A,B
from table
A | B |
---|---|
1 | 2 |
1 | 3 |
select A,B
from table
A | B |
---|---|
1 | 2 |
1 | 3 |
1 | 2 |
-- 取前n行
select *
from table
limit n
-- 取第m行起的n行
select *
from table
limit n offset m
-- 取第m行起的n行
select *
from table
limit n,m
按select的第n个列排序:order by n
-- 按select的第1个列排序,也即按A排序
select A,B
from table
order by 1
升序(默认):ASC
order by 1 ASC
或
order by 1
降序:DESC
order by 1 DESC
符号 | 意义 |
---|---|
<> | 不等于 |
!< | 不小于 |
!> | 不大于 |
BETWEEN A AND B | 在A,B之间 |
IS NULL | 是NULL |
与字符串比较时用
1.第一种用法
select *
from table
where A in (1,2)
2.第二种用法
select *
from table
where A in (select ...)
否定跟在其后的条件
-- 找到A不为1的行
select *
from table
where not A=1
匹配任何字符出现任意次数(0-n次),但不能匹配NULL
'Fish%'可匹配:
匹配 | 不匹配 |
---|---|
Fish123 | fish |
Fish | asdfFish |
'%'唯一不匹配:NULL
下划线:匹配任何字符出现一次
指定字符集
例子 | 解释 | 匹配 |
---|---|---|
[YO]% | 匹配以Y或O为开头的词 | Yeah,Oh,Y,O |
[^YO]% | 匹配不以Y或O为开头的词 | are,she,he |
函数 | 解释 |
---|---|
UPPER() | 转大写 |
LOWER() | 转小写 |
LEFT() | 左边字符 |
RIGHT() | 右边字符 |
LENGTH() | 长度 |
SUBSTR() | 提取字符串组成 |
SOUNDEX() | 返回念起来的样子 |
YEAR() | 取年份 |
ABS() | 绝对值 |
EXP() | 指数 |
PI() | pi值 |
SQRT() | 平方根 |
COS() | cos |
SIN() | sin |
TAN() | tan |
函数 | 解释 |
---|---|
AVG() | 平均值 |
COUNT() | 计算行数 |
MAX() | 最大值 |
MIN() | 最小值 |
SUM() | 取和 |
avg(price) 所有价值的平均
avg(distinct price) 不同价值的平均
嵌套在其他查询中的查询
from tableA,tableB
where tableA.a=tableB.a
from tableA
inner join tableB
on tableA.a=tableB.a
相同的两个表的联结;
为了防止歧义,最好用别名。
最好用自联结,而避免使用子查询
至少有一列不止出现在一个表中
联结包含在相关表中没有关联的行
联结种类 | 语句 | 解释 |
---|---|---|
内联结 | INNER JOIN … ON … | |
左外联结 | LEFT OUTER JOIN … ON … | 左边的表 all in |
右外联结 | RIGHT OUTER JOIN … ON … | 右边的表 all in |
全外联结 | FULL OUTER JOIN … ON … | 左右的表全 all in |
UNION
组合数条SQL查询
SELECT ...
UNION
SELECT ...
列-表达式-聚集函数
(次序不需相同)UNION ALL
INSERT
insert into [tablename]
values('xxx','xxx',...)
更安全的写法
INSERT INTO [tablename](attrA,attrB,...)
values('xxx','xxx',...)
插入检索出的数(可方便地插多行)
insert into [tablename1](attrA,attrB,...)
select attrA,attrB,...
from [tablename2]
create table [newtablename]
select *
from [oldtablename]
UPDATE
使用时要小心,稍不注意,更新所有行
UPDATE [tablename]
SET ...=xxx
WHERE ...
DELETE
删除部分行
delete from [tablename]
where ...
删除所有行
truncate [tablename]
create table [tablename]
{
-- [attrname] [type] null/not null,
Attr_A char(num) null,
Attr_B decimal(m,n) not null,
Attr_C varchar( ) null
}
注意点:
①null为default
②创造新表时,指定的表名必须不存在,否则会报错
③只有not null的列可作为主键
④null和’'不一样
alter table
给已有表加列
alter table [tablename]
add [attrname] [type];
给已有表删列
alter table [tablename]
drop column [attrname];
drop table [tablename]
RENAME [oldtablename] [newtablename]
视图,是虚拟的表,只包含使用时动态检索数据的查询
create view [viewname] as ...
select ....
drop view [viewname];
事务:指一组SQL语句
回退:指撤销指定SQL语句的过程
提交:指将未存储的SQL结果写入数据库表
保留点:指事务处理中设置的临时占位符,可对它发布回退
-- 开始事务
begin transaction
-- 提交事务
commit transaction
可尝试下列语句查看效果
delete from [tablename];
rollback;
作用:进行明确的提交
-- 使用格式: savepoint [savepoint_name]
savepoint delete1;
回退到保留点
-- 使用格式: rollback to [savepoint_name]
rollback to delete1;