SQL Server数据库 笔记----对表的查询

本文介绍了数据库的基本操作,包括如何使用SQL进行数据的插入、更新和删除。详细讲解了单条和批量插入,更新数据时需注意主键不可修改,以及删除数据的区别——DELETE与TRUNCATE。此外,还涵盖了查询数据的各种方法,如模糊查询、范围查询、聚合函数的应用以及分组查询和连接查询的概念与用法。
摘要由CSDN通过智能技术生成

  • 操作数据之插入数据

对表的操作:插入,更新,删除

1.单条数据插入

--1)

insert (into) 表名(列名,列名......)

values(值,值......)

--2)

insert  表名(列名......)

select 值......

2.多条插入

一次性插入多条 批量插入操作

--1)

insert into 表名(列名1,列名2......)

values (值1,值2......),(值1,值2......),(值1,值2......)......

--2)union去除,union all允许重复

union all 效率比 union 高

insert  表名(列名1,列名2......)

select (值1,值2......) union

select(值1,值2......) union

......

select(值1,值2......)

3.克隆表数据

将一张表的数所复制到另一张表

--1)目标表在数据库中已经存在

insert into 目标表名(目标表中列名)

select 源表中列名 from 源表

--2)目标表之前数据库中不存在,执行操作时自动创建

select 源表中列名 into 新表--目标表

from 源表

  • 操作数据之更新删除数据

1.更新数据 update

update 表名  set 列名=值,列名=值

where 标识列=值 (and | or)条件
--修改的某一列

注:主键不可以修改

       如果不加where条件,会把整个表的数据都修改了

2.删除数据

--1)只是删除数据,表还在

1.delete from 表名

delete from 表名 
where 条件

----不加条件,会删除整个表数据,几乎都要where,加where条件  标识列 值还是接着删除前的值而自增。(假设删除的标识列为:6,7,8,删除后再添加列,标识列从9开始)

--delete 语句会造成标识列的值不连续

如果想要删除数据,让标识列的值恢复到初始值:

2.truncate table 表名(不带条件)

truncate table 表名

---表数据清空,恢复到初始化,标识列也恢复

--truncate 效率比delete 高,delete每删除一条数据,都会在日志里记录,truncate不会记录日志,不激活触发器,drop,truncate是即时操作,不可恢复。

--慎用truncate一旦删除,不能恢复。

  • 查询数据之单表查询

--1.查询所有数据

--*表示所有列

select * from 表名

-- 2.查询表的部分数据

select 列名1,列名2......
from 表名
where 条件

--3. 列命别名

--列名 AS 别名

--列名   别名

--别名 = 列名

--4.排序 order by

select 列名1,列名2......
from 表名
order by 列名 asc

--主键默认就有排序功能,从小到大

--asc 升序,从小到大

--desc 降序,从大到小

--多个字段排序,用逗号隔开

--条件,分组在前,order by 永远在后

  • 查询之模糊查询

select 列名

from 表名

where 列名 like .....

匹配模式:

1. %  0个或多个

like '%2%'   包含2

like '%4'       以4结尾

like ' 2%'      以2开头

2. _   匹配单个字符

一个'_'一个字符,限制表达式的字符长度

3.[ ]    范围匹配,括号中所有字符中的一个

[mnd] 匹配到字符中有m,n,d中任意一个

[1-9]   匹配到有1-9数字中任意一个的字符

4.[^]    不在括号中所有字符之内的单个字符

[^mnd]     匹配到字符中没有m,n,d的

[^1-9]       匹配到没有1-9数字的字符

  • 查询之范围查询

1.select  from where 子句 条件--给定范围

--1)比较运算符

>        <        >=        <=        

--2)  in( )/  not in ( )

in(2,3,4)    在2,3,4范围内

not in(2,3,4)     不在2,3,4范围内

in(子查询)         在查询的结果范围内

--3)between and

--在20-30范围内

--between 20 and 30

--ID >= 20 and <=30

2.前面多少条,百分比

--前10条
select  top 10 *

from 表名
--前10%
select  top 10 percent *

from 表名

  • 聚合函数

聚合函数:对一组值执行计算并返回单一的值。

select count(*) from 表名

select count(1) from 表名-----一般统计一个表的记录数
--select count(1)伪造列

--count 记录个数

--sum 求和,相加

--avg 求平均

--max 求最大

--min 求最小

    

  • 分组查询group by

语法:

select ......where...... group by ......  having..... order by .....

--group by结合聚合函数,根据一列或多个列对结果集进行分组。

--having 分组后的筛选条件

--select  列名,count(1) 用户数

--from 表名

--group by  列名

  • 连接查询

连接查询: 根据两个或多个表之间的关系,从这些表中查询数据.

目的: 实现多表查询

分类: 内连接, 外连接, 全连接, 交叉连接

  • 内连接

inner join  使用比较运算符 = > < >= <= 进行表间的比较,查询与条件相匹配的数据.

本质上是等值连接 , 结果: 相匹配的数据查询出来,显示匹配出来的结果,如果没有匹配上,就没有结果.

显式连接

inner join on 关联条件

表 inner join  表  on  条件  where

select 列名
from 表1
inner join 表2 on 关联条件  -- and ...

隐式连接

select ...... from 表,表 where 关联条件

select *
from 表1,表2
where 关联条件 
  • 外连接

外连接分类:  左外连接, 右外连接, 全外连接 

1.  左连接 left (outer) join

结果:         左表:  所有行

                 右表:  行数与左表相同,没有匹配上的,显示NULL

select * from 左表

left join  右表

on 关联条件

2.   右连接 right  (outer) join

结果:         左表:  行数与右表相同,没有匹配上的,显示NULL

                 右表: 所有行

select * from 左表

right join  右表

on 关联条件

3.全连接  full  (outer ) join 

结果:        左表和右表所有数据都会出来, 每一行的数据, 如果在另一个表里匹配不上, 就是对应显示NULL

select *  from 表1

full join 表2

on 关联条件

4.交叉连接 cross (outer) join

如果不带where 子句时,返回被连接的两个表的笛卡尔积,  返回的行数 是两个表行数的乘积.

select * from 表1

cross join 表2 --不带where的显示为表的行数乘积

where 关联条件  --只显示匹配出来的行数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

婧婧子♔♔♔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值