数据库基本操作练习

2023-11-14

创建数据库sqlserver_test1

create database python_test1;

使用数据库

use sqlserver_test1;

创建students表

create table students(
id int primary key identity(1,1) not null,
name varchar(30) default ' ',
age tinyint default 0,
height decimal(5,2),
gender varchar(10) check (gender in ('男','女','保密')) default '保密',
cls_id int default 0,
is_delete bit default 0
);

在这里插入图片描述

创建classes表

create table classes(
id int primary key identity(1,1) not null,
name varchar(30) not null
);

在这里插入图片描述

增加数据,注意主键使用自动增加时必须用0代替

insert students values
( '小明', 18, 180.00, '男', 1, 0),
( '小月月', 18, 170.00, '女', 2, 0),
( '彭于晏', 20, 183.50, '男', 1, 0),
( '刘德华', 35, 178.00, '男', 1, 0),
( '黄蓉', 34, 156.00, '女', 1, 0),
( '凤姐', 25, 158.00, '女', 2, 0),
( '王祖贤', 20, 170.00, '女', 1, 0),
( '周杰伦', 26, 175.00, '男', 1, 0),
( '陈坤', 20, 175.00, '男', 2, 0),
( '刘亦菲', 20, 163.00, '女', 1, 0),
( '金星', 26, 164.00, '保密', 1, 0),
( '静香', 24, 165.00, '女', 2, 0),
( '郭靖', 30, 181.00, '男', 1, 0),
( '周杰', 36, 182.00, '男', 2, 0),
( '蔡徐坤', 22, 181.00, '男', 1, 0);

在这里插入图片描述

insert into classes values( '一期'),( '二期'),( '一期');

查询

查询所有字段

--select * from 表名
select * from students;

在这里插入图片描述

select * from classes;

在这里插入图片描述

查询指定字段

--select 列1,列2... from 表名
select name, age from students;

在这里插入图片描述

使用as给字段起别名

--select 字段 as 别名 from 表名
select name as '姓名' from students;

在这里插入图片描述

使用as给表起别名

--select 别名.字段 ... from 表名 as 别名;
select s.name from students as s;

消除重复行

--select distinct 字段 from 表名;
select distinct gender from students;

在这里插入图片描述

比较运算符> < = >= <=

--select ... from 表名 where 条件
--查询年龄大于20的学生信息
select * from students where age>20;

在这里插入图片描述

逻辑运算符 and or not

--查询20-28之间的所有学生信息
select * from students where age>20 and age<28;

在这里插入图片描述

查询指定数量 TOP

--SELECT TOP number|percent column_name(s) FROM table_name;
select TOP 5 * from students where gender='男'

在这里插入图片描述

模糊查询 like rlike

--like   %替换一个或多个    _替换一个
--查询姓名中以'小'开头的同学
select name from students where name like '小%';

在这里插入图片描述

--查询名字为两个字的同学
	select name from students where name like '__';

在这里插入图片描述

范围查询 in , not in , between…and… , not between…and…

--in(3,6,9)表示在一个非连续的范围内
--查询年龄为18,22,26的同学
select * from students where age in(18, 22, 26);

在这里插入图片描述

--between ... and ...表示在一个联系的范围内
	select * from students where age between 25 and 35;

在这里插入图片描述

排序

--order by 字段
--asc升序    desc降序
--select ... from 表名 where 条件 order by 字段 asc/desc(, 字段2 asc/desc);
--若只有一个排序字段,当出现相同大小的数据时,默认按照主键排序
	--查询18-34之间的男性,按照年龄从小到大排序
	select * from students where (age between 18 and 34) and gender='男' order by age asc;

在这里插入图片描述

聚合函数

--计数 count   查询满足条件的个数  
	--查询男性有多少人
	select count(*) as 男性人数 from students where gender='男';

在这里插入图片描述

--最大值  max
	--查询年龄最大的男性
	select max(age) as 男性最大年纪 from students where gender='男';

在这里插入图片描述

--最小值   min
--平均值   avg
--求和    sum
--四舍五入    round( ,n)
	--计算所有人年龄的平均值,并取2位小数
	select round(sum(age)/count(*), 2) as '平均年龄' from students;

在这里插入图片描述

分组

--分组一般和聚合函数联合使用

--group by
	--计算每种性别的人数
	select count(*) as '性别分类' from students group by gender;

在这里插入图片描述

--查询年龄大于30的人数和小于30的人数各多少
	select age as '年龄',count(*) as '总数' from students  group by age;

在这里插入图片描述

链接查询

--inner join ...on
--select * from 表1 inner join 表2 on 条件
	--查询 有能够对应班级的同学及班级信息
	select * from students inner join classes on students.cls_id=classes.id;

在这里插入图片描述

--通过给表起别名方便查询,查询各个班里的同学姓名
	select s.name, c.name from students as s inner join classes as c on s.cls_id=c.id;

在这里插入图片描述

--查询对应班级的同学信息,按照班级排序,同一个班级按照ID排序
select c.name ,s.* from classes as c inner join students as s on c.id=s.cls_id order by c.name desc, s.id asc

在这里插入图片描述

--左连接  表1 left join 表2 on 条件
	--查询每位同学的班级信息,先将周杰和静香的班级改为4
	update students set cls_id=4 where name='周杰'or name='静香';
	select * from students left join classes on students.cls_id=classes.id;

在这里插入图片描述

 
--如果使用inner join 则看不到null值的数据
	select * from students inner join classes on students.cls_id=classes.id;

在这里插入图片描述

--使用right join则以右边的表为主,左边没有对应数据的显示null
	select * from students right join classes on students.cls_id=classes.id;

在这里插入图片描述

视图

--创建视图,查询每个学生的班级信息并保存在视图中
create view cls_message
as
select s.*,c.name as '班级' from students as s right join classes as c on s.cls_id=c.id;

在这里插入图片描述

--通过视图cls_message查询每位同学的班级信息
go
select name,班级 from cls_message;

在这里插入图片描述

--删除视图
Drop view cls_message

游标

游标的作用是完成一个事务,一个事物中的所有操作要么都完成,要不都不进行,确保数据的一致性。

--创建游标
declare cur_Student Cursor
for
select id,name,age from students;
--打开游标
open cur_Student;

--读取游标
fetch next from cur_Student
while @@FETCH_STATUS=0
begin
fetch next from cur_Student
end
--关闭游标
close cur_Student
deallocate cur_Student

在这里插入图片描述

存储过程

--存储过程:
--存储过程的优点:1.编译后在服务器端 2.一次编译多次调用 3.具有一定的数据安全性
--创建存储过程--
create proc pro @xuehao varchar(10)=null   --创建存储过程pro 一个参数@xuehao 后面是它的类型
as                                         --这个as超重要,不能漏写
if @xuehao=null                            --如果是null,返回10
    return 10
if not exists(select * from 学生 where 学号=@xuehao)    --如果找不到就返回-10
    return -10
select 姓名 from 学生 where 学号=@xuehao               --找到这个人,返回0(不知道你们有没有注意到,这些是按照顺序排列的,不能变顺序)
    return 0

--执行存储过程--
declare @num int                      --定义一个变量来接收结果
exec @num=pro 'S0101'                 --调用存储过程
if @num=10                            --如果是10,那就说明你输入的不对
 select '输入错误'
else 
    if @num=-10                        --10就是没有这个人,0就是有这个人
      select '没有这个人'
    if @num=0
      select '找到了'

触发器

--触发器
--创建一个触发器之后,只要被触发就会执行相应的操作,就是这么简单,而触发条件也很简单,无非就是三种,增删改create trigger tr_test --创建触发器
create trigger chufaqi
on 学生 for insert,update,delete           --触发条件,增删改
as
select * from inserted                   --inserted和deleted是数据库系统在触发的时候自动创建的两个表,inserted表存放了插入和更新数据时的变化
select * from deleted                    --deleted存放了删除的时候的信息


insert into 学生(学号,姓名,性别)             --插入数据,增
values('S1112','李三','男')

delete from 学生                           --删
where 姓名 = '李三'
update 学生  set 性别='女' where 姓名='李三'      --改
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据库基本操作练习 的相关文章

  • 使用每个单独行的多个“where”子句更新多行

    我正在尝试像这样更新我的表 Update MyTable SET value 1 WHERE game id 1 x 4 y 8 SET value 2 WHERE game id 1 x 3 y 7 SET value 3 WHERE g
  • 使用临时表替换 WHERE IN 子句

    我让用户输入我需要在表中查询的值列表 该列表可能非常大 并且长度在编译时未知 而不是使用WHERE IN 我认为使用临时表并对其执行联接会更有效 我在另一个SO问题中读到了这个建议 目前找不到它 但会在找到时进行编辑 要点是这样的 CREA
  • SQL Server 2008 R2 DMV - sys.dm_sql_referencing_entities - 查询用法

    我正在尝试使用以下命令获取表列表的所有依赖项sys dm sql referencing entities DMV 这个查询给了我所有表的列表 SELECT TableName from FinalTableList 此查询给出 Table
  • MySQL 中有“connect by”替代方案吗?

    如果我使用 Oracle 有connect by可用于创建分层查询的关键字 目前我正在一个项目中使用MySQL 我想知道是否有替代方案connect by在 MySQL 中 我尝试过谷歌 但到目前为止还没有结果 我想要实现的是通过一个查询从
  • 从 CTE 插入

    WITH DTL AS SELECT CMPI CODE CMN CDTY MTRL CMI WT FACTOR CMI CNTRCT RATE PL PRESENT PRICE TRM CODE ROUND NVL PRESENT PRI
  • 使用sqlbulkcopy之前如何创建表

    我有一个 DBF 文件 我正在尝试导入该文件 然后将其写入 SQL 表 我遇到的问题是 如果我使用 SqlBulkCopy 它需要我提前创建表 但在我的场景中这是不可能的 因为 dbf 文件不断变化 到目前为止 这是我的代码 public
  • 选择每组最新的项目[重复]

    这个问题在这里已经有答案了 可能的重复 检索每组中的最后一条记录 https stackoverflow com questions 1313120 retrieving the last record in each group 我有 2
  • 查询从同一表中的另一条记录获取值并按大于间隙阈值的差异进行过滤

    我将数据导入到 MS Access 中的临时表中 如下所示 我添加了需要使用 SQL 查询计算的 Gap 和 Previous Current 列 间隙阈值 是用户输入或范围提供给查询和例如是 300 GlobalID 对 ItemID 进
  • Oracle中如何选择前100行?

    我的要求是获取每个客户的最新订单 然后获取前100条记录 我编写了一个如下查询来获取每个客户的最新订单 内部查询工作正常 但我不知道如何根据结果获得前 100 名 SELECT FROM SELECT id client id ROW NU
  • TSQL:无法对 COUNT(*) 执行聚合函数 AVG 来查找一天中最繁忙的时间

    考虑一个保存日志数据的 SQL Server 表 重要的部分是 CREATE TABLE dbo CustomerLog ID int IDENTITY 1 1 NOT NULL CustID int NOT NULL VisitDate
  • PostgreSQL & regexp_split_to_array + 取消嵌套

    我有这样的绳子 测试1 纽约 X 测试 2 芝加哥 Y 测试 3 宾夕法尼亚州哈里斯堡 Z 我需要的结果是 Column1 Column 2 Column3 Test 1 new york X Test 2 chicago Y Test 3
  • C# 查询两个数据库的数据

    我目前有一个查询 我正在从两个不同的数据库获取数据 这些数据被附加到一个名为 accountbuys 的列表中 我的第一个表有三个数据条目 3个想要购买股票的帐户 下一张表有 17 个数据点 购买 17 只股票 I am merging t
  • 在bigquery中比较两个表的有效方法

    我有兴趣比较两个表是否包含相同的数据 我可以这样做 standardSQL SELECT key1 key2 FROM SELECT table1 key1 table1 key2 table1 column1 table2 column1
  • 了解涉及 3 个或更多表时 JOIN 的工作原理。 [SQL]

    我想知道是否有人可以帮助我提高对 SQL 中 JOIN 的理解 如果它对问题很重要 我会特别考虑 MS SQL Server 取 3 个表 A B A 通过某些 A AId 与 B 相关 和 C B 通过某些 B BId 与 C 相关 如果
  • 如何显示 RSpec 测试生成的 SQL 查询日志?

    我正在为我的 Rails 3 应用程序编写规范 我想测试数据库事务是否真的有效 如果能够看到我的应用程序在规范驱动下生成的 sql 查询 这将非常有帮助 有没有办法像在 Rails 控制台中一样查看查询 我正在使用 Rails 3 0 9
  • 常量值如何影响连接的 ON 子句?

    我最近发现 LEFT JOIN 的 ON 子句可能包含 1 1 等值 这让我感到不安 因为它打破了我对连接功能的看法 我遇到过以下情况的更详细版本 SELECT DISTINCT Person ID FROM Person LEFT JOI
  • 如何限制两个表之间一对多关系中的多个数量?

    我有一个带有两个 MySql 表的 MySQL 数据库 第一个是第一个表 表 A 有一列具有唯一值 从值 从 1 到 n 在第二个表 2 表 B 中 我有两列 在第一个表中我有一个名称 在第二个我的值从 1 到 n 如果我在 中添加一个值
  • 从 $i 获取值,顺序被打乱

    for i 0 i lt count name i some output ommited td td
  • ActiveRecord 查询,按关联排序,最后一个 has_many

    我试图列出所有Users by the created at最近创建的关联记录 通讯 列 到目前为止我所拥有的 User includes communications order communications created at IS
  • SQL Server 标识列值从 0 而不是 1 开始

    我遇到了一个奇怪的情况 数据库中的某些表的 ID 从 0 开始 即使 TABLE CREATE 的 IDENTITY 1 1 也是如此 对于某些表来说是这样 但对于其他表则不然 它一直有效到今天 我尝试过重置身份列 DBCC CHECKID

随机推荐

  • JS数据结构之队列(Queue)

    特点 先进先出 也叫FIFO First In First Out 结构图 这跟我们生活中的排队买票很像 谁先排在前面 谁先买票 队列常见的操作 enqueue el 向队列尾部添加一个新的项 dequeue 移除队列的第一项 并返回被移除
  • Web测试需要注意的点

    一 功能测试 测试用例是测试的核心 测试用例的设计是一种思维方式的体现 在用例的设计中 用的比较多的方法是边界值分析法和等价类划分法 下面主要从输入框 搜索功能 添加 修改功能 删除功能 注册 登录功能以及上传图片功能等11个方面进行总结说
  • Java“求两个正整数的最大公约数和最小公倍数”流程图+调试+程序

    题目 求两个正整数的最大公约数和最小公倍数 基本要求 程序风格良好 使用自定义注释模板 两种以上算法解决最大公约数问题 提供友好的输入输出 提高要求 1 三种以上算法解决两个正整数最大公约数问题 2 求3个正整数的最大公约数和最小公倍数 程
  • ionic知识系列:Could not remove dir ‘/data/data/io.ionic.starter/code_cache/.ll/‘

    ionic安卓工程build出来的文件损毁 可以将android app build目录删除 执行ionic cap copy 在android studio停止android studio模拟器 再次运行app
  • Python:统计数字

    目录 题目描述 输入描述 输出描述 输入输出样例 参考代码 sort 与 sorted 区别 题目描述 某次科研调查时得到了 n 个自然数 每个数均不超过 1 5 10 9 已知不相同的数不超过 10 4个 现在需要统计这些自然数各自出现的
  • 遗传算法初探——以电力系统有功优化为例(二)

    上一篇 https blog csdn net m0 43401436 article details 106564397 我自己的代码都差点认不出来了 完整代码如下 安装matpower后可直接运行 注释写得比较清楚 结合上一篇应该能看明
  • C#中{ get; set; }写法是什么意思

    代表 属性xxx 可以 是获取或设置 如果是 仅是 set 则只能设置 反之亦然 老版本的 net framework 对于属性 不能省略 必须这样做 int adminID 0 public AdminID get return admi
  • 日志查找常用命令-超实用

    0 前言 1 命令的尾部添加 color 或者 color auto 可以使关键字带颜色 很清晰 1 Linux日志查找常用命令 1 1 cat zcat cat n app log grep error 查询日志中含有某个关键字error
  • RapidMiner是什么

    RapidMiner是世界领先的数据挖掘解决方案 在一个非常大的程度上有着先进技术 应用介绍编辑 数据挖掘过程简单 强大和直观 可以用简单脚本语言自动进行大规模进程 图形用户界面的互动原型 Java API 应用编程接口 RapidMine
  • HTML期末学生大作业-使用HTML+CSS技术仿传智博客网站

    精彩专栏推荐 文末获取联系 作者简介 一个热爱把逻辑思维转变为代码的技术博主 作者主页 主页 获取更多优质源码 web前端期末大作业 毕设项目精品实战案例 1000套 程序员有趣的告白方式 HTML七夕情人节表白网页制作 110套 超炫酷的
  • wirehark数据分析与取证Alpha-1.pcapng

    什么是wireshark wiresharek Alpha 1 pcapng数据包分析 数据包已上传资源 有问题请私信博主 wiresharek Wireshark 前称Ethereal 是一个网络封包分析软件 网络封包分析软件的功能是检索
  • input()函数的使用方法

    关键词 input 函数 摘要 input 函数的使用方法 目录 一 input 函数输入机制与强制转换 二 input 函数的提示项 三 一次性输入多个变量值 一 input 函数输入机制与强制转换 input 函数返回的数据类型均为st
  • 图像分割语义分割mobilenetv1-unet网络 基于pytorch框架制作

    图像分割语义分割mobilenetv1 unet网络 基于pytorch框架制作 全套项目 包含网络模型 训练代码 预测代码 直接下载数据集就能跑 拿上就能用 简单又省事儿 内附四五个数据 供验证使用 ID 1524966108394844
  • 分布式解决方案

    笔者会慢慢写一些关于分布式系统的解决方案 现在微服务系统的流行 所以以前的一些组件已经无法满足系统的高可用性了 笔者会慢慢的介绍一下内容 1 分布式缓存篇 redis 2 分布式存储 MongoDB Mycat 对mysql进行集成 3 分
  • webpack5配置CSS

    webpack只能解析js 需要依赖相关loader进行解析css css css loader 负责将 Css 文件编译成 Webpack 能识别的模块 style loader 会在输出文件中动态创建一个 Style标签 以模块化的形式
  • 世界会走向哪里?

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 世界会走向哪里 作者 阮一峰 1 围棋可能是世界上最复杂的游戏 在一个19根横线乘19根竖线的棋盘上面 有着无穷多种的变化 根据计算 围棋可能的下法共有2 08 x 101
  • 测试用例设计方法-边界值分析法

    边界值分析法 定义 边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法 通常边界值分析法是作为对等价类划分法的补充 这种情况下 其测试用例来自等价类的边界 与等价类区别 1 边界值分析不是从某等价类中随便挑一个作为代表 而是使这
  • oracle数据库insert报错:无效的数据类型

    今天工作中往oracle数据库中insert数据的时候遇到这样一个错误 无效的数据类型 日志也打印出error occurred setting parameters 大概就是这意思吧 具体的字母忘了 我也能看出是赋值的数据与数据库对应字段
  • OpenWRT编译错误:Package missing dependencies for the following libraries

    发现问题 今天在 OpenWRT 上增加了个 package 编译的时候 报出如下错误 Package test modules is missing dependencies for the following libraries lib
  • 数据库基本操作练习

    目录 创建数据库sqlserver test1 使用数据库 创建students表 创建classes表 增加数据 注意主键使用自动增加时必须用0代替 查询 查询所有字段 查询指定字段 使用as给字段起别名 使用as给表起别名 消除重复行