SQL基础操作

Posted 付出才有回报,敢于尝试才能成功。

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL基础操作相关的知识,希望对你有一定的参考价值。

ANDor的区别

AND :可以将N多的条件下使用AND运算符。采取动作的SQL语句,无论是事务或查询,所有分离的条件,必须为True

or:可以将N多的条件下使用OR运算符。SQL语句将要采取的动作,无论是一个事务或查询,任何一个OR必须为TRUE分离的条件

--通配符

_ 匹配单个

%多字符匹配

 

--空值检测

查询时如果需要查某字段为空的需要使用 is null,不能使用=null

is null或者is not null

 

--反义运算符

反义运算符(!=   !<   !>)建立在同义运算符对面(=  <   >)

不等于<>

不大于<=

不小于>=

 

--多值检测

要获取23,25,28岁员工信息

select * from tableA where age=23 or age=25 or age=28或者

使用in关键字

select * from tableA where age in(23,25,28)

in在不间断的值时使用更好如果是连续的值可以使用范围查询条件

select * from tableA where age>23 and age <28   或者

使用between and获得范围这在sql2008后才有

select * from tableA where age between 23 and 28

--查询工资小于5000,年龄在2528之间的

select * from T_Employee

where FSalary<5000

and Fage BETWEEN 25 AND 28

 

--分组

group by

需要分组的所有列都必须位于group by子句的列表中,不在子句的列是不能放在select语句后的列名列表中的

采用分组的查询结果集时分组形势的,所以不表示分散的其它数据,想展示其它数据需要使用聚合函数

--各个年龄段的人数

select Fage,count(*) as 数量 from T_Employee  group by Fage

 

Having 子句

用于过滤分组后条件

--检查人数大于1的年龄段

select fage,count(*) as 数量 from T_employee group by  fage having count(*)>1

注意:

having后如果使用count(*)不会有问题,但如果使用别名去查询会出现列名无效提示因为还没有被编译,此时可以使用子查询

--限制结果集行数

Row_number()

select row_number(order by FSalary) ,*from T_Employee

--抑制数据重复

DISTINCT

 

--字符串拼接

ms sqlserver中使用+号拼接

length计算字段长度

--联合结果集

原则:每个结果集必须有相同的猎术,②每个结果集的列必须类型相容

union

 

--函数

abs()绝对值,power()求指数,sqrt()平方根,rand()随机数,Ceiling()向上取整,Floor()向下取整,round()四舍五入

getDate()获取当前时间

--索引

create INDEX 索引名 ON 表名(字段1,字段3,字段2)--创建,索引名保持唯一性

DROP INDEX 索引名 ON 表名 --删除索引

--约束

非空约束NOT NULL,唯一约束 UNIQUE

CHECK约束:检查插入数据是否满足条件

主键约束,外键约束

 

--表连接

内连接inner join  将几张表等值连接

select FNumber,FPrice from T_Order inner join T_Customer on FCustomerId=T_Customer.FId

where T_Customer.FName=‘TOM‘

 

不等值连接  on子句后使用不等于、大于、小于等

 

交叉连接   没有on子句

select ... from 表名 cross join 表名

 

左链接left join

左表中所有的记录都会被防盗结果集中,无论是否在右表中存在匹配记录

--查询每张订单的单号、价格、对应客户的名称及年龄

select o.FNumber,o.FPrice,o.FCustomerId,c.FName,c.FAge from  T_order o

left join T_Customer c

on o.FCustomerId=c.FID

 

右连接 right join

与左连接相反

 

--子查询

where语句中的标量子查询

select * from T_ReaderFavorite

where FCategoryId=(

select FID from T_Category where FName=‘story‘

)

 

in运算符与子查询

--查询出所有年份的读者信息

select * from T_Reader where FYearOfjoin in(

select FYearPublished from T_Book

)

any运算符与子查询

=Any等价于in运算符

<>ANY等价于not in运算符

 

EXISTS运算符:它不予列匹配,用来检查每一行是否匹配子查询,可以认为Exists就是用来匹配子查询结果是否为空的

 

Insert into. 目标表..SELECT * from 要查的表--将数据从一张表导入另外一张表

 

--索引

聚簇索引:索引顺序与数据表的物理顺序相同,eg字典的拼音顺序

非聚簇索引:索引孙旭与数据表的物理顺序不同,eg字典的偏旁

索引的存储是占用资源的所以创建索引也要有限度,且索引采用B树结构存储,在增删改时会产生大量存储碎片

 

增加字段: alter table [表名] add [字段名] 字段属性 default 缺省值 default 是可选参数

删除字段: alter table [表名] drop 字段名

修改变长文本型字段的大小:alter table [表名] alter 字段名 varchar(N)

删除表: drop table [表名]

Insert创建表

create table #famousjaycess2
(
jc varchar (15) DEFAULT ‘‘,
occupation varchar (25) DEFAULT ROCK STAT,
becamefamous int default 0 ,
notes text null
)
GO

 

 

 

根据下表,编写sql语句;表A、表BUserName进行关联找出表A有表B没有的记录,只能用一个select

假定通过id字段关联 如果查询结果要显示userName那么on时就要关联UserName

1)

select * from A where id not in (select id from B)

2)

select A.* from A LEFT JOIN B ON A.id = B.ID WHERE B.ID IS NULL

 









以上是关于SQL基础操作的主要内容,如果未能解决你的问题,请参考以下文章

spark关于join后有重复列的问题(org.apache.spark.sql.AnalysisException: Reference '*' is ambiguous)(代码片段

mybatis入门基础----动态SQL

sql 数据操作片段

[Go] 通过 17 个简短代码片段,切底弄懂 channel 基础

sql sql里面的代码片段

Microsoft SQL Server 代码片段收集