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),不消除重复行。