sql常用语法


sql基本语法

创建数据库

CREATE DATABASE database-name

创建新表

create table 表名 (列名 数据类型 primary key(设置主键),  
                        列名 数据类型 ,
                        列名 数据类型 not null(不能设置空值))

创建索引

create [unique] index idxname on tabname(col….)

根据已有的表创建新表

create table tab_new as select col1,col2… from tab_old definition only

使用旧表创建新表

create table tab_new like tab_old 

创建索引

create [unique] index idxname on tabname(col….)

将元素插入表

insert into table1(field1,field2) values(value1,value2)

创建视图

create view viewname as select statement

删除数据库

drop database 数据库名

删除表

drop table tabname

删除主键

Alter table tabname drop primary key(col)

删除表中指定的元素

delete from table1 where 范围

删除视图

drop view viewname

修改列名

alter table 表名 rename column 旧列名 to 新列名;

添加主键

Alter table tabname add primary key(col)

在表中增加一列

Alter table 表名 add column 列名 数据类型

元素更新

update table1 set field1=value1 where

select * from table1 where field1 like ’%value1%’

查询前n项数据

SELECT TOP n  table_name FROM table

去重

distinct去重,放在列的前面使用。

select distinct university from user_profile

LIMIT 查询结果限制返回行数

LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。
LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。
如果只给定一个参数,它表示返回最大的记录行数目。
如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。
为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1。
初始记录行的偏移量是 0(而不是 1)。

例5.检索记录行 6-10
SELECT * FROM table LIMIT 5,5

例6.检索记录行 11-last
SELECT * FROM table LIMIT 10,-1

例7.检索前 5 个记录行
SELECT * FROM table LIMIT 5

as将查询后的列重新命名

SELECT device_id as user_infors_example FROM user_profile LIMIT 2

其他

where

字句用于筛选数据,提取满足条件的记录。

SELECT * from 表名 WHERE 条件语句;

in

SELECT * FROM table1 WHERE age1 IN(value1,value2,...);

Group by

一张表,一旦分组 完成后,查询后只能得到组相关的信息。
组相关的信息:(统计信息) count,sum,max,min,avg 分组的标准)
在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据 在selecte统计函数中的字段,不能和普通的字段放在一起;

select 类别, sum(数量) as 数量之和 from A group by 类别

join

inner join

产生的结果是A和B的交集(相同列里面的相同值)。内连接是最常见的一种连接,它也被称为普通连接,只连接匹配的行(仅对满足连接条件的CROSS中的列)。它又分为等值连接(连接条件运算符为”=”)和不等值连接(连接条件运算符不为”=”,例如between…and)。

SELECT *FROM b INNER JOIN A on b.name=A.name

full (outer) join

产生的结果是A和B的并集(如果没有相同的值会用null作为值)。FULL JOIN 会从左表和右表那里返回所有的行。如果其中一个表的数据行在另一个表中没有匹配的行,那么对面的数据用NULL代替

SELECT * FROM b FULL OUTER JOIN A on b.name=A.name

left (outer) join

产生表B的完全集,而A表中匹配的则有值(没有匹配的则以null值取代)。LEFT JOIN返回左表的全部行和右表满足ON条件的行,如果左表的行在右表中没有匹配,那么这一行右表中对应数据用NULL代替。

SELECT * FROM b Left outer join A on b.name=A.name

right (outer) join

参考Left (outer) join

cross (outer) join

cross对两个表执行笛卡尔乘积。它为左表行和右表行的每种可能的组合返回一行。返回(左表行数*右表行数)行的表。ps:很少用到这个语法。注意如果不是使用嵌套的select语句,一般系统都会产生笛卡尔乘积然再做过滤。这是对于性能来说是非常危险的,尤其是表很大的时候。

SELECT * FROM b  cross join A

Natural Join

自然连接是一种特殊的等值连接,在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。

模糊查询 like

like语句的语法格式是:select * from 表名 where 字段名 like 对应值(子串),它主要是针对字符型字段的,它的作用是在一个字符型字段列中检索包含对应子串的

% 包含零个或多个字符的任意字符串

例,查询name字段中包含有“明”字的。
select * from table1 where name like '%明%'

_(下划线) 任何单个字符:

like'_heryl' 将搜索以字母 heryl 结尾的所有六个字母的名称(如 Cheryl、Sheryl)

[ ] 指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符:

例,查询name字段中含有数字的。
select * from table1 where name like '%[0-9]%'
例,查询name字段中含有小写字母的。
select * from table1 where name like '%[a-z]%
例,查询name字段中不含有数字的。
select * from table1 where name like '%[!0-9]%'

[^] 不属于指定范围 ([a-f]) 或集合 ([abcdef]) 的任何单个字符:

like'M[^c]%' 将搜索以字母 M 开头,并且第二个字母不是 c 的所有名称
(如MacFeather)。

* 它同于DOS命令中的通配符,代表多个字符:

例,查询name字段中以“李”字开头。
select * from table1 where name like '李*

?同于DOS命令中的?通配符,代表单个字符 :

b?b代表brb,bFb等

# 大致同?,不同的是代只能代表单个数字

k#k代表k1k,k8k,k0k

运算词

UNION

UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2

EXCEPT

EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。

INTERSECT

INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。

欢迎补充


文章作者: xucanxx
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 xucanxx !
  目录