SQL常用语句总结大全

mysql和oracle语法都差不多,但还是有差别,查阅资料后我总结了一套完整的sql语句大全,供初学者学习

1.SQL是用于访问和处理数据库的标准计算机语言-------结构化查询语言(Structured Query Language)
RDBMS:关系型数据库管理系统,是sql基础,有 MS SQL Server、IBM DB2、Oracle、MySQL等

2.语法:
表是相关数据的集合,由行和列组成
SQL不区分大小写
SELECT - 从数据库中提取数据 UPDATE - 更新数据库中的数据
DELETE - 从数据库中删除数据 INSERT INTO - 向数据库中插入新数据
CREATE DATABASE - 创建新数据库 ALTER DATABASE - 修改数据库
CREATE TABLE - 创建新表 ALTER TABLE - 变更(改变)数据库表
DROP TABLE - 删除表 CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引

3.查询-----select
(1)select----从数据库选取数据
select 列名 from 表名------------------查询指定的列的数据
select * from 表名------------------------查询整张表

(2)distinct :一列可能有多个重复值,distinct返回唯一不同的值,即去重复
select distinct 列名 from 表名-----------查询指定列的唯一不同的数据

(3)where:过滤条件
例:SELECT * FROM web WHERE country='成都';
字符串需要用引号,数字不需要引号
select * from 表名 where 条件--------查询满足条件的所有数据
=:等于 !=或<>:不等于 >:大于 >=:大于等于
<:小于 <=:小于等于 between:在某个范围
like:某种模式 in:多个可能值 like:模糊查询 not like:不匹配记录
例:
name 含 "oo" 的所有客户:SELECT * FROM web WHERE name LIKE '%oo%';
name不含“00”的所有客户:SELECT * FROM web WHERE name NOT LIKE '%oo%';

通配符:%----代替多个字符,-------替代一个字符
M% : 以M 开头的 %M% :包含M %M
% : 包含M并且M在倒数第二位
_M:任一字符开头M结尾的 [ ]:字符列中任一个 [^ ]/[! ]:不在字符列任一个
例:
name 以 "G"、"F" 或 "s" 开始的所有网站:
SELECT * FROM web WHERE name REGEXP '^[GFs]';
name 不以 "G"、"F" 或 "s" 开始的所有网站:
SELECT * FROM web WHERE name REGEXP '[GFs]';
注:mysql 以 REGEXP 或 NOT REGEXP 运算符 (或 RLIKE 和 NOT RLIKE) 来操作正则表达式

in:匹配条件存在多个值
例: name 为 "a" 或 "b" 的所有网站
SELECT * FROM web WHERE name IN ('a','b');

between:两个值之间的数据(不同数据库可能取边值不同)
例: alexa 介于 1 和 20 间
SELECT * FROM web WHERE alexa BETWEEN 1 AND 20;
name 介于 'A' 和 'H' 之间字母:
SELECT * FROM web WHERE name BETWEEN 'A' AND 'H';
date 介于 '2016-05-10' 和 '2016-05-14' 之间:
SELECT * FROM a where date BETWEEN '2016-05-10' AND '2016-05-14';

(4)and 和or :两个及以上条件
and:第一条件和第二个条件都成立,显示一条记录
or :第一和第二只要一个成立,显示一条记录
select * from 表名 where 条件1 and/or 条件2
例:"web" 表中选取 alexa 排名大于 "15" 且国家为 "CN" 或 "USA" 的所有网站
SELECT * FROM web WHERE alexa > 15 AND (country='CN' OR country='USA');

(5)order by :对结果集排序,默认升序ASC,降序用DESC
select * from 表名 order by 列名-----根据某列升序排列
select * from 表名 order by 列名1,列名2---根据列1排序,如果数据相同按照列2排序

(6)top子句:规定返回的记录数目(不是所有都支持)
sql server/MS Access语法:
select top 数字|percent 列名 from 表名
例:"Customers" 表中选取前面 50% 的记录
SELECT TOP 50 PERCENT * FROM web;
mysql和oracle用其他方式:
select 列名 from 表名 limit 数字-------mysql
select 列名 from 表名 where rownum<=数字------oracle

(7)别名:为表或列指定别名(使用:不止一个表,使用了函数,列名过长,需要合并多个列)
表:select 列名 from 表名 as 表别名
列:select 列名 as 列表名 from 表名
例:三列(url、alexa 和 country)结合在一起,并创建一个名为 "site_info" 的别名
SELECT name, CONCAT(url, ', ', alexa, ', ', country) AS site_info FROM web ;
"web " 和 "access_log" 表,并分别为它们指定表别名 "w" 和 "a"
SELECT w.name, w.url, a.count, a.date FROM web AS w, access_log AS a WHERE a.site_id=w.id and w.name="小三";

(8)join:基于相同字段,将多个表的行结合
inner join:若表至少一个匹配,返回行(inner join=join),没有不返回

left join :从左表(table1)返回所有行,即使右表(table2)中没有匹配,若右表没有匹配,返回null

right join:右表(table2)返回所有的行,即使左表(table1)中没有匹配。若左表中没有匹配,则结果为 NULL。

full join:只要其中一个表中有匹配,返回行

(9)union :合并两个及以上select 语句结果
每个select语句必须有相同数量的列,列有相似的数据类型,列的顺序相同
union默认选取不同的值,union all允许重复的值
结果的列名等于union中第一个select语句中的列名

4.插入-----insert into
insert into 表名(列1,列2,列3) values (值1,值2,值3)
id不用插入,是自动更新,唯一标识

5.更新-----update
update------更新(修改)已有数据
update 表名 set 列=值 where 列=条件 (where指定条件更新,无where则全部更新)

6.删除-----delete
delete from 表名 where 条件-----删除满足条件的数据
删除表中所有行(清空数据):delete from 表名 或 delete * from 表名
还有一种方式:truncate table 表名-------删除速度快,删除表中所有内容
drop table 表名:删除表,连表结构也删除

7.表复制:select into
复制一张表的数据插入到另一张新表中:create table 新表 select * from 旧表
也可以用select into (mysql不支持,但有insert into .....select)
select * into 新表 from 旧表---------旧表复制备份
select 列名 into 新表 from 旧表---------旧表指定列复制到新表
select * into 新表 from 旧表 where 1=0-------创建一个新的空表(无数据)

8.数据复制:insert into .....select
从一个表复制数据,插入到另一个已存在的表中
insert into 表2 select * from 表1:复制表1所有列到表2
insert into 表2 列名 select 列名 from 表1:复制表1的指定列插入到表2中

9.创建数据库:create database
create database 数据库名-----创建一个数据库

10.创建表:create table
create table 表名(列名1 数据类型(大小),列名2 数据类型(大小)...)
表由行和列组成,每个表必须有表名

11.约束Constraints:用于规定表中的数据规则
若违反规则,行为被约束终止
约束条件可以在建表时规定(create table)、或建表之后(alter table)
create table 表名(列名1 数据类型(大小) 约束条件,列名2......)
sql有以下约束:
not null:指定某列不能存储null值,即不为空,若无添加值无法更新表

unique:某列的每行必须有唯一的值,每个表可以有多个unique约束
(1)create table时:
单个:create table 表名(id int not null,...,unique (id))-------mysql
create table 表名(id int not null unique,..., )----------其他
多个:create table 表名(id int not null,name varchar(255) not
null,constraint 别名 unique(id,name))
(2)alter table时:
单个:alter table 表名 add unique(列名)
多个:alter table 表名 add constraint 别名 unique(列1,列2)
(3)撤销 :
alter table 表名 drop index 别名----------mysql
alter table 表名 drop constraint 别名-----------其他

primary key:某列有唯一标识,每个表只能有一个primary key约束
主键必须包含唯一的值,主键列不能含null值,每个表只能有一个主键
(1)create table时:
单个:create table 表名(id int not null,...,primary key (id))---mysql
create table 表名(id int not null primary key,...)-------其他
多个: create table 表名(id int not null ,name varchar not
null,...,constraint pk_id primary key (id,name))-------所有
(这里 其实只有一个主键pk_id)
(2)alter table时:
单个:alter table 表名 add primary key(列名)
多个:alter table 表名 add constraint 别名 primary key(列1,列2)
注:必须在建表时把主键声明为不含null
(3)撤销:
alter table 表名 drop primary key----------mysql
alter table 表名 drop constraint 别名-----------其他

foreign key :外键,指向另一个表的primary key
(1)create table时:
单个:create table 表1(id int not null,p_id int...,primary key
(id),foreign key(p_id) peferences 表2 (p_id))----------mysql
create table 表1(id int not null primary key,...,p_id int foreign
key peferences 表2 (p_id))-------其他
(2)alter table时:
单个:alter table 表1 add foreign key(列) references 表2(列)
多个:alter table 表1 add constraint 别名 foreign key(列)
references 表2(列)
(3)撤销:
alter table 表名 drop foreign key 别名----------mysql
alter table 表名 drop constraint 别名------------其他

check:值符合指定条件,同上分类
(1)create table:
单个:create table 表名 (p_id int not null,...,check (p_id>0))-----mysql
create table 表名 (p_id int not null check (p_id>0),...,)-----其他
多个: create table 表名 (p_id int,city varchar(255),...,constraint 别
名 check (p_id>0 and city='v'))
( 2 ) alter table:
单个:alter table 表名 add check (p_id>0)
多个:alter table 表名 add constraint 别名 check (p_id>0 and city='v')
( 3 )撤销:
alter table 表名 drop check 别名----------mysql
alter table 表名 drop constraint 别名---------其他

default:默认值
(1)create table:
create table 表名 (...,name varchar(255) default '张三')
( 2 ) alter table:
alter table 表名 alter 列 set default '值'-----mysql
alter table 表名 modify 列 default '值'-----oracle
alter table 表名 alter column 列 set default '值'-----其他
( 3 )撤销:
alter table 表名 alter 列 drop default----------mysql
alter table 表名 alter column 列 drop default---------其他

12.创建索引:create index------加速搜索、查询
create index 索引名 on 表名(列名)-----允许重复
create unique index 索引名 on 表名(列名)------唯一索引

13.撤销删除:drop -----------------删除索引、表和数据库
删除索引:drop index 索引名 on 表名---------MS Access
drop index 表名.索引名---------sql server
drop index 索引名--------------oracle/db2
alter table 表名 drop index 索引名-----mysql
删除表:drop table 表名(删除内容 : truncate table 表名)
删除数据库:drop database 数据库名

14、操作表:alter -----------用于已有表的添加、删除、修改列
添加列:alter table 表名 add 列名 数据类型
删除列:alter table 表名 drop colnum 列名
改变列的数据类型:
alter table 表名 alter colnum 列名 数据类型-----sql server
alter table 表名 modify colnum 列名 数据类型-------oracle/mysql
alter table 表名 modify 列名 数据类型------------oracle 10g后

15.主键自动生成:auto increment --------每次插入新记录会自动创建字段的值
create table 表名(id int not null auto_increment,....)----------------mysql
默认开始1,每次加1,若以其他值可用auto_increment,=100
create table 表名(id int identity(1,1) primary key,..)-------------------sql server
identity(10,2)规定id起始为10,每次递增2
create table 表名(id integer primary key autoincrement,....)-------Access
默认1,每次加1,autoincrement(10,5)以10开始,每次加5

oracle中比较复杂:
首先创建sequence对象:
create sequence 名字 minvalue 1 start with 1 increment by 1 cache 10
然后插入数据的时候:
insert into 表(id,字段2,...)values(名字.nextval,值2,...)

16.null值:不能比较,null和0不等价
is null: select * from 表 where 列 is null
is not null: select * from 表 where 列 is not null
操作null,很多时候运算需要将null转化成0,所以需要null函数:
isnull(列,0)---------------------------------sql server/MS Access
nvl(列,0)------------------------------------oracle
ifnull(列,0)或coalesce(列,0)----------mysql

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容