3522vip-澳门新葡亰平台官网-www.3522vip.com

3522vip☞(www.rivieraquest.com)能够为大家带来真正的真钱享受,澳门新葡亰平台官网开创业内先河,注册,开户,登录开始体验不同的娱乐世界,全国第一家以娱乐产品为主体对象的专业平台,菲律宾全资子公司成立,天天免费68周周再送168。

3522vip > 网络数据库 > SQL 常用的SQL 由浅入深

原标题:SQL 常用的SQL 由浅入深

浏览次数:198 时间:2019-11-17

常用的SQL 由浅入深

SQL 基本知识

SQL Server 是Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点,可跨越从运行Microsoft Windows 98 的膝上型电脑到运行Microsoft Windows 2012 的大型多处理器的服务器等多种平台使用。 Microsoft SQL Server 是一个全面的数据库平台,使用集成的商业智能 (BI)工具提供了企业级的数据管理。Microsoft SQL Server 数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使您可以构建和管理用于业务的高可用和高性能的数据应用程序。

简单点一句话概括: 数据是具有一定意义的数字、字母、符号的统称,数据库就是存放数据的

回到顶部
vSql(Structured Query Language) server基础
1.Sql server的组成:

主要数据库文件:.mdf 特点:有且只有一个
次要数据库文件:.ndf 特点:任意个
日志数据库文件:.ldf 特点:至少一个
2.操作数据库:

创建数据库:create databse 库名
查看所有数据库:exec sp_helpdb
查看当前数据库:exec sp_helpdb 库名
使用数据库:use 库名
删除数据库:drop database 库名 ps:正在使用的数据库无法删除
3.表的结构: 字段 数据类型(属性)

4.数据类型:

整型
微整型 tinyint 1个字节
小整型 smallint 2个字节
整型 int 4个字节
大整型 bigint 8个字节
浮点型
float 不能精确存储数值
real 不能精确存储数值
decimal(numeric ) 同义,用于精确存储数值
字符型
char 长度在1到8000之间 定长字符数据
varchar 长度在1到8000之间 变长字符数据
text 存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符
时间日期型:datetime 年月日时分秒毫秒
货币型:money 精确到货币单位的千分之十。存储大小为 8 个字节。存储形式为12345.67
回到顶部
vsql server表
1.创建表的语法:

create table 表名
(
字段名称1 数据类型[属性],
字段名称2 数据类型[属性],
...
)
2.查看所有表语法: exec sp_help

3.查看当前表语法: exec sp_help 表名

4.修改表结构:

增加一列语法:alter table 表名 add 字段名 数据类型
删除一列语法:alter table 表名 drop column 字段名
修改一列语法:alter table 表名 alter column 字段名 数据类型
删除表语法:drop table 表名
5.操作表数据:

完全插入数据语法:insert into 表名(字段名1,字段名2...) values(值1,值2...)
省略插入数据语法:insert into 表名 values(值1,值2...)
部分插入数据语法:insert into 表名(字段名1,字段名2...) values(值1,值2...)
多行插入数据语法:insert into 表名 values(值1,值2...),(值1,值2...)
查看所有记录语法:select * from 表名
查看部分记录语法:select 字段名1,字段名2... from 表名
修改一条记录语法:update 表名 set 字段名=值 [where条件]
删除一条记录语法:delete from 表名 where 条件
清空表所有记录
delete from 表名
truncate from 表名 ps:至于他们的区别,我就不多介绍了,有兴趣的可以看这里SQL Server中truncate、delete和drop的异同点
6.标识列 identity(初值,增值):

定义:能唯一区分表中的每一条记录,且该属性是自动增长的
特点
一个表中有且只有一个标识列
标识列不能编辑,不能更新
标识列数据类型只能是整型
标识列不为null
标识列不重复
作用:保证数据完整性
7.运算符:

sql server的运算符与其他语言不同,这里列举三个

&&-----and
||-----or
!-----not
8.六大约束:

检查约束 check 语法 check(条件)
默认约束 default 语法 default'默认语句'
非空约束 not null
唯一性约束 unique
主键 primary key
主键的值不能重复
一个表中有且只有一个主键
外键与主键相对应
主键类型可以是整型、字符型
语法:字段名 数据类型 primary key
外键 foreign key references
与主键相对应
外键的值一定在主键范围之内
外键的值可以重复
语法:字段名 数据类型 foreign key references 主表名
注意事项:
在操作主表从表时:先删除从表,再删除主表,删除数据,也要先从后主
在建立表时:要先创建主表,再创建从表,插入数据,先主后从
回到顶部
vsql server查询
1.查询符合条件的数据: select 字段名 from 表名 [where 条件]

2.之间的

and ... or
between ... and
例句:查询23岁到25岁之间的学生
select * from student where age>=23 and age<=25
select * from student where age between 23 and 25
3.不显示重复项:distinct select distinct 字段名 from 表名

4.前几项 top select top n * from 表名

5.排序 order by 字段名 asc升序 desc降序(默认情况下为升序) select * from student where age>25 order by name desc

  1. is not null/null select * from 表名 where 字段名 is null

7.列起别名as select id as 学生编号, name as 学生姓名 from student as a 注:实际语法中as可以省略

8.高级查询(模糊查询) like select 字段名 from 表名 where 字段名 like '通配符 值 通配符'

sql server 通配符

% 任意字符
[]范围内任意字符
[^]非范围内任意字符
9.联合查询 join

交叉查询:select 字段名 from 表1 cross join 表2 [where 条件]
内连接查询:select 字段名 from 表1 inner join 表2 on 联合条件 [where 条件]
外连接
左外连接:select 字段名 from 表1 left join 表2 on 联合条件 [where 条件]
右外连接:select 字段名 from 表1 right join 表2 on 联合条件 [where 条件]
全外连接:select 字段名 from 表1 full join 表2 on 联合条件 [where 条件]
多表连接:select 字段名 from 表1 inner join 表2 on 联合条件 inner join 表3 on 联合条件 [where 条件]
10.嵌套查询(嵌套查询都可以用联合查询完成),显示的字段在一个表中,条件在另外一个表中

in() 在...范围之内的
not in() 不在...范围之内的
exists 存在
not exists 不存在

  1. 分组 group by

回到顶部
v系统函数
1.统计(聚合)函数

Transact-SQL编程语言提供下列聚合函数:
AVG 返回指定组中的平均值,空值被忽略。
例:select prd_no,avg(qty) from sales group by prd_no

  1. COUNT 返回指定组中项目的数量。
    例:select count(prd_no) from sales
  2. MAX 返回指定数据的最大值。
    例:select prd_no,max(qty) from sales group by prd_no
  3. MIN 返回指定数据的最小值。
    例:select prd_no,min(qty) from sales group by prd_no
  4. SUM 返回指定数据的和,只能用于数字列,空值被忽略。
    例:select prd_no,sum(qty) from sales group by prd_no
  5. COUNT_BIG 返回指定组中的项目数量,与COUNT函数不同的是COUNT_BIG返回bigint值,而COUNT返回的是int值。
    例:select count_big(prd_no) from sales
  6. GROUPING 产生一个附加的列,当用CUBE或ROLLUP运算符添加行时,输出值为1.当所添加的行不是由CUBE或ROLLUP产生时,输出值为0.
    例:select prd_no,sum(qty),grouping(prd_no) from sales group by prd_no with rollup
  7. BINARY_CHECKSUM 返回对表中的行或表达式列表计算的二进制校验值,用于检测表中行的更改。
    例:select prd_no,binary_checksum(qty) from sales group by prd_no
  8. CHECKSUM_AGG 返回指定数据的校验值,空值被忽略。
    例:select prd_no,checksum_agg(binary_checksum(*)) from sales group by prd_no
  9. CHECKSUM 返回在表的行上或在表达式列表上计算的校验值,用于生成哈希索引。
  10. STDEV 返回给定表达式中所有值的统计标准偏差。
    例:select stdev(prd_no) from sales
  11. STDEVP 返回给定表达式中的所有值的填充统计标准偏差。
    例:select stdevp(prd_no) from sales
  12. VAR 返回给定表达式中所有值的统计方差。
    例:select var(prd_no) from sales
  13. VARP 返回给定表达式中所有值的填充的统计方差。
    例:select varp(prd_no) from sales
    2.日期函数

getDate()获取当前时间
Dateadd() 增加时间
datediff(datepart,startdate,enddate)

startdate 和 enddate 参数是合法的日期表达式。

datepart 参数可以是下列的值:

datepart 缩写
年 yy, yyyy
季度 qq, q
月 mm, m
年中的日 dy, y
日 dd, d
周 wk, ww
星期 dw, w
小时 hh
分钟 mi, n
秒 ss, s
毫秒 ms
微妙 mcs
纳秒 ns
datepart(datepart,date)函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等,datepartd参数可以参见上表
datename(datepart,date)傳回代表指定 date 之指定 datepart 的字元字串
3.数学函数

abs()取绝对值
round()四舍五入
floor()函数返回小于或等于所给数字表达式的最大整数
ceiling()函数返回大于或等于所给数字表达式的最小整数
sqrt()开平方根
关于abs()/round()/...这些数学函数的demo可以在我的上篇博客中找到
4.字符串函数

left()左截串
right()右截串
ltrim()去左空格
rtrim()去右空格
replace(字符串,旧字符串,新字符串) 替换
substring(字符串,位置,长度) 截字符串 ps:sql中字符串下标从1开始
reverse()反转
len()长度
upper()转大写
lower()转小写
回到顶部
vT-sql
1.声明变量语法: declare @变量名 数据类型

给变量赋值

set @变量名=值
select @变量名=值
输出变量 select @变量名

ps:若想输出变量、声明变量、变量赋值和变量输出三条语句需一起执行

2.编程语句

begin...end
if...else
回到顶部
v视图
1.创建视图

create view 视图名称
as
sql中查询语句
2.使用视图 select * from 视图名

3.查看视图 exec sp_help

4.查看视图内容 exec sp_helptext 视图名

5.修改视图 alter view 视图名 as select * from 表名 [where条件]

6.删除视图 drop view 视图名

7.修改视图 update 视图名 set 字段名=值 [where条件]

回到顶部
v存储过程/触发器/事务
1.sql server 存储过程

复制代码
create proc | procedure pro_name
[{@参数数据类型} [=默认值] [output],
{@参数数据类型} [=默认值] [output],
....
]
as
select ......
复制代码
2.sql server 触发器

insert触发器
update触发器
delete触发器
关于sql server 触发器这里就不多介绍了,更多详情大家有兴趣可以看这里
3.sql server 事务

关于sql server 事务这里就不多介绍了,更多详情大家有兴趣可以看这里

DDL:对数据库,表,列进行操作DDL:对数据库,表,列进行操作

                    关键字:create      创建表和数据库

                                 alter          修改表的字段

                                 alter语句的关键字有 add(增加),drop(删除),modify(修改字段类型),change(可修改字段名和字段类型),rename to(修改表名)

                               drop          删除表,数据库和一个字段

大致上回想一下自己常用的SQL,并做个记录,目标是实现可以通过在此页面查找到自己需要的SQL ,陆续补充    有不足之处,请提醒改正

DML:对表中的数据进行增,删,改的操作

                     关键字:     insert into    向表中插入一条数据

                                     update          修改数据

                                      delete             删除数据

首先我创建了两个库,每个库两张表.(工作的时候,每个公司最好有自己的数据库模型,产品也可以看,模型工具一般用PD(power designer)什么的,用起来简单规范方便,建议萌新学习)

DQL:对表中的数据进行查询

                      关键字:  select    查询

查看建表语句: show create table 表名

图片 1·

基本语句:

第二个库crtest2是复制第一个crtset的  复制表的方法为右键--》编写脚本--》打开库2的窗口复制(建议瞟一眼脚本,执行不成功的  脚本最上面数据库改成目标数据库)

alter语句:

向表中增加一个字段:         alter table 表名 add column 字段名 字段类型;

删除表中一个字段:            alter table 表名 drop column 字段名;

修改表中某一个字段类型: alter table 表名 modify column 字段名  新字段类型;

可修改的字段名和修改字段类型:

                   alter table 表名 change column 字段名 新字段名  字段类型(也可写新字段类型)

修改表名:   alter table 表名 rename to 表名;

给字段添加主键: 

  alter table 表名 change column 字段名 字段名 字段类型 primary key auto_increment

 auto_increment:   给主键自增     (一般用于编号)

1.增删改查

drop语句

删除数据库:  drop 数据库名;

删除表:         drop 表名;

删除字段:     alter table 表名 drop column 字段名

查:程序员最主要的技能  有很多方法  这里由浅入深讲一下

DML语句

插入一条所有字段的数据:insert into 表名 values(按字段顺序写值);

插入一条部分字段的数据:insert into 表名 (字段名)values(值);

修改数据:    update 表名 set 属性名=值;       修改的是 属性名 那一列的数据全部为 值

按条件修改数据: update 表名 set 属性名=值 where 条件

删除表所有 数据 :   delete from 表名 ;

按条件删除数据:          delete from 表名 where 条件

select   字段名  from 表名 (*代表查一个表的所有字段,其实不建议具体开发查全部,用哪个字段查哪个,*号的效率太慢,耗性能,优化的一部分)

DQL语句

查询所有数据: select * from 表名;

查询部分字段: select 字段名1,字段名2 from 表名;

查询去重数据: select distinct 字段名  from 表名;

图片 2

条件查询:

1..逻辑:and和or

select * from 表名 where name='jack' and pwd ='123';

select * from 表名 where name=‘jack’or name='rose';

2..比较条件: >  <  >=  <=  =  between and(在某个区间范围内,首位都包含在内)

select * from 表名 where 字段>1;

select * from 表名 where 字段名 between 数字 and 数字;

3..判空条件:  =''  is null(判断空)  <>''(是不等于)  is not null(判断非空)

select * from 表名 where 字段名<>' ';

select * from 表名 where 字段名 is not null;

select * from 表名 where 字段名 is  null;

4..模糊查询  

   like关键字     _(表示一个字符)   %(表示多个字符  包括0个)

想查询名字包含jack的

select * from表名 where字段名 like '_jack';

匹配名字包含jack的或者包含rose的

select * from 表名 where 字段名 like '%jack%' or 字段名 like '%rose%';

5..聚合函数 max(列) min(列) avg(列) count(列)(不包含null) sum(列)总和

select  max(java) from student ;      不包含null

select min(java) from student;          不包含null

select sum(java) from student;          不包含null

select avg(java) from student;      不包含null

select count(*) from student;          不包含null

6..分页查询

  关键字:  limit   int , int 

select * from 表名  limit  3,4;

3 表示从3的下一条语句开始查询         4表示查询出四条语句

7..分组查询

关键字: group by         

select * from 表名 group by 分组的列名  ;

按条件分组  

   关键字  : having   分组的的条件      where 分组前的条件

select * from 表名  group by 分组的列名  having 条件;

select * from 表名  where 条件   group by 分组的列名 ;

8..排序查询

   关键字:order by   asc  升序   默认      可不许asc

              order  by    desc  降序

如果和分组一起用     先分组后排序

select * from 表名 group by 分组的列名 order by 排序的列名

9..多表查询

1) 隐式内连接查询     (按照条件进行显示)

select * from 表名1,表名2 where 表名1.(点) 主键=表名2.(点)   和主键有关系的列名

2)显示内连接

select * from 表名1 inner join 表名2 on  条件              inner 可省略

3)外连接

左外连接:   左边的表为主表       右边的表为副表

右外连接:   右边的表为主表       左边的表为副表

(1)左外连接:   select * from 表名1 left outer join 表名2 on 条件

(2)右外连接:  select * from 表名1 rigth outer join 表名2 on 条件

outer可省略

4)自连接:   (自己连接自己)

  select * from 表 join 表 on 条件

10..子查询      当一个sql语句需要用到另一个sql语句的结果集

    例:      1  查看用户为张三的订单详情

        select * from orders where user_id in(select id from user where username='张三')

查三个字名字的人,并把name= 杨永信 的输出为 雷电法王,这一手是为了使用一下case when (碰到条件查询不要着急,一步步来,先确保数据逻辑的正确性,写好后,再去优化SQL)(美化SQL用Navicat Premium,SQL format,SQL Beautifier等等,这三个亲测好用)

case when .. then  .. else ..end  就当做  if ...else....来用就行 

图片 3

查数据量,不建议用 count(*),换成count(字段名),没有字段名的约束  用 count(1)来查,执行速度截然不同

 图片 4

 

连表查询,超过两个表以上的连表查询,一定要记得大表在前小表在后。实际情况里 inner join,left join使用的比较多,这里做一下区分,到底什么时候用inner,什么时候用left

网上也有很多,说的太官方,容易迷。这里我通俗的讲一讲

left  join:左联合  就是说两个表关联  左边的是大哥,一切以大哥为准,大哥表的数据无条件全部返回,其他表跟大哥对应的数据,大哥也全都要 (所以一般来说,left比inner的数据量要多)

inner join:内联合  两个表是拜把子  互相谦让,你有我也有的数据才要,取共同点

语法: select   *  from  A表  left  join B表  on  a.id = b.id   很简单 

 跨库查询也是一样,这里我查crtest 和crtest2 两个库的HelloMan表的联合查询,很简单,看一下

图片 5

 

去重

 SQL去重一般用distinct,group by这两种方法,介绍一下  

 distinct:   select  distinct(字段名) from  表名  where  条件

 group by:select   字段    from   表名   group  by  字段  having  条件

使用 group by的时候 用having语法 而不是where  (本人倾向于group  by,因为它不仅仅是去重查找,删重,条件嵌套可以一起写,功能多一些吧。 )

 图片 6

 

ROW_NUMBER()函数

这个ROW_NUMBER(),在数据库执行的时候有点耗性能,但它的任务多数情况下是用来提升性能的。奇怪吧,往下看看

你可以帮他当做成分组函数或是分析函数

刚接触.NET的时候。大家对GridView,Repeater这些控件很熟悉吧。数据量多的时候我们使用了分页,但是一般的是直接绑定数据源的分页,又称为假分页,还是一次性从数据库里select这些数据。但是用ROW_NUMBER() 就可以做成真分页,每次都只差Pagesize条数据。提升了性能速度吧。

语法:ROW_NUMBER() over(order by  字段名 desc) 

图片 7

 

 

看到了吧,多了个排序字段  在where一下 真分页就OK了嘛

 假设我们想查一个商场一个时间段内,第88位消费的顾客的信息。嘿嘿,一步到位的话也可以写,不用ROW_NUMBER()的函数还真的不好写。用ROW_NUMBER()就好多了

回到我们的测试表 对着上面 我们查一下年龄段在15-25,四个字名字,排名第二高的武林高手(武林排名按照各自的cid来算,剑无尘第一,因为数据少我们能从上面提前看出答案,是关谷),SQL如下:

 

 图片 8

 

先分组,再寻找   简单的很

模糊查询

很简单,一看便知  这里说一下我们经常用的通配符为  %% ,但是还有一些 像  like '_ a_'  ,like  '[a]b' 这种的 也是通配符,LZ觉得看关键字Like就完事儿了。知道就行了不常用

图片 9

提一下,左右两边带 %,是两边都进行模糊匹,只放在左边是左边匹配,右边同理,一看便知

图片 10

 

 

时间日期函数

convert()  date()   大家可以去这来看看学习   http://www.w3school.com.cn/sql/func_convert.asp 

写的全面,很好,这里我就不写了

 

数据格式转换,时间戳

时间戳:就是linux的时间   好一点的数据库储存时间的字段都是用时间戳存的,int类型,安全,占用空间小, 简单查看时间戳  

 方法:  CONVERT(VARCHAR(10),DATEADD(s, ttime 8 * 3600, '1970-01-01'),120)  AS  times      (这里我又在测试表里又加了个ttime字段,用来存时间戳,取出来的时候用这个函数转换成时间,精确度自己设置)

图片 11

convert()  在SQL中convert()函数除了转时间还可以进行其他格式的转换,最常用的就是钱,money,decimal类型,还有如果数据库是varchar类型之类的,然后你扔进来的是int,dateteime之类的就需要convert()转换一下,很简单

格式: convert(要转的类型,要转的数据)  例如: CONVERT(VARCHAR(50),tid)   tid是int型转成varchar,很简单

说到这里要熟练使用 IsNULL()函数,加减乘除都要外面包一层IsNull()函数

 格式:IsNull(数据,默认值)   例如  ISNULL(sum,0)  as sum

先写到这里,差不多够用,有时间的话lz会补充的,总结写复杂的SQL不一定需要会那些新颖或者太复杂的函数,按照逻辑一点点的来,分步查,慢慢提高自己SQL。

 

2.删除,更新

写删除更新语句一定要写where,养成好习惯 

update  表名  set  字段名=‘...’  where (1=1)

delete  from  表名  where (1=1)

3.增加

 insert into 表名(字段名)  values  (增加数据)

 

图片 12

 

接下来,会写一篇,thousand级别的数据库的批量插入,本人自己理解的萌新入门的存储过程,触发器,SQL的事物以及有关表数据量太大的优化解决方案,很简单,大佬请无视。

通过简单的两句代码,慢慢发现编程的乐趣

本文由3522vip发布于网络数据库,转载请注明出处:SQL 常用的SQL 由浅入深

关键词: 3522vip

上一篇:SqlServer索引页损坏恢复

下一篇:没有了