数据库 笔记 sql sql常用语法 xucanxx 2020-04-27 2025-08-06 sql基本语法 增 创建数据库 1 CREATE DATABASE database-name
表 创建新表 1 2 3 create table 表名 (列名 数据类型 primary key(设置主键), 列名 数据类型 , 列名 数据类型 not null(不能设置空值))
创建索引 1 create [unique] index idxname on tabname(col….)
根据已有的表创建新表 1 create table tab_new as select col1,col2… from tab_old definition only
使用旧表创建新表 1 create table tab_new like tab_old
创建索引 1 create [unique] index idxname on tabname(col….)
将元素插入表 1 insert into table1(field1,field2) values(value1,value2)
创建视图 1 create view viewname as select statement
删 删除数据库
表 删除表
删除主键 1 Alter table tabname drop primary key(col)
删除表中指定的元素 1 delete from table1 where 范围
删除视图
改 修改列名 1 alter table 表名 rename column 旧列名 to 新列名;
添加主键 1 Alter table tabname add primary key(col)
在表中增加一列 1 Alter table 表名 add column 列名 数据类型
元素更新 1 update table1 set field1=value1 where
查 1 select * from table1 where field1 like ’%value1%’
查询前n项数据 1 SELECT TOP n table_name FROM table
去重 distinct去重,放在列的前面使用。
1 select distinct university from user_profile
LIMIT 查询结果限制返回行数 LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。 LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。 如果只给定一个参数,它表示返回最大的记录行数目。 如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。 为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1。 初始记录行的偏移量是 0(而不是 1)。
1 2 3 4 5 6 7 8 9 例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将查询后的列重新命名 1 SELECT device_id as user_infors_example FROM user_profile LIMIT 2
其他 where 字句用于筛选数据,提取满足条件的记录。
1 SELECT * from 表名 WHERE 条件语句;
in 1 SELECT * FROM table1 WHERE age1 IN(value1,value2,...);
Group by 一张表,一旦分组 完成后,查询后只能得到组相关的信息。 组相关的信息:(统计信息) count,sum,max,min,avg 分组的标准) 在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据 在selecte统计函数中的字段,不能和普通的字段放在一起;
1 select 类别, sum(数量) as 数量之和 from A group by 类别
join inner join 产生的结果是A和B的交集(相同列里面的相同值)。内连接是最常见的一种连接,它也被称为普通连接,只连接匹配的行(仅对满足连接条件的CROSS中的列)。它又分为等值连接(连接条件运算符为”=”)和不等值连接(连接条件运算符不为”=”,例如between…and)。
1 SELECT *FROM b INNER JOIN A on b.name=A.name
full (outer) join 产生的结果是A和B的并集(如果没有相同的值会用null作为值)。FULL JOIN 会从左表和右表那里返回所有的行。如果其中一个表的数据行在另一个表中没有匹配的行,那么对面的数据用NULL代替
1 SELECT * FROM b FULL OUTER JOIN A on b.name=A.name
left (outer) join 产生表B的完全集,而A表中匹配的则有值(没有匹配的则以null值取代)。LEFT JOIN返回左表的全部行和右表满足ON条件的行,如果左表的行在右表中没有匹配,那么这一行右表中对应数据用NULL代替。
1 SELECT * FROM b Left outer join A on b.name=A.name
right (outer) join 参考Left (outer) join
cross (outer) join cross对两个表执行笛卡尔乘积。它为左表行和右表行的每种可能的组合返回一行。返回(左表行数*右表行数)行的表。ps:很少用到这个语法。注意如果不是使用嵌套的select语句,一般系统都会产生笛卡尔乘积然再做过滤。这是对于性能来说是非常危险的,尤其是表很大的时候。
1 SELECT * FROM b cross join A
Natural Join 自然连接是一种特殊的等值连接,在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。
模糊查询 like like语句的语法格式是:select * from 表名 where 字段名 like 对应值(子串),它主要是针对字符型字段的,它的作用是在一个字符型字段列中检索包含对应子串的
% 包含零个或多个字符的任意字符串 1 2 例,查询name字段中包含有“明”字的。 select * from table1 where name like '%明%'
_(下划线) 任何单个字符: 1 like'_heryl' 将搜索以字母 heryl 结尾的所有六个字母的名称(如 Cheryl、Sheryl)
[ ] 指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符: 1 2 3 4 5 6 例,查询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]) 的任何单个字符: 1 2 like'M[^c]%' 将搜索以字母 M 开头,并且第二个字母不是 c 的所有名称 (如MacFeather)。
* 它同于DOS命令中的通配符,代表多个字符: 1 2 例,查询name字段中以“李”字开头。 select * from table1 where name like '李*
?同于DOS命令中的?通配符,代表单个字符 :
# 大致同?,不同的是代只能代表单个数字
运算词 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),不消除重复行。
欢迎补充