首页 > 数据库 >SQL语句学习笔记

SQL语句学习笔记

时间:2023-12-12 14:44:52浏览次数:25  
标签:语句 键名 sno 笔记 查询 SQL where select

目录

SQL语句

SQL详细名词和概念

sql详细名词

1.数据库内可以有多个表

2.表的内部主要由键名和键值组成

3.键有主键,外键和普通键三种类型

4.主键唯一且不为空,但可以由两个键合起来作为一个主键,此时两个单独都不是主键,只有一起才是主键,即联合主键

5.外键可以不唯一且为空

6.外键是某个外表的主键

表内的具体样子

sno列名 mno cno
1 2 3
1 2 3

建表

语句 作用
create database A 创建数据库
use A 引用数据库
create table AItem 创建图表

创建表的语法结构

create table Aitem{

​ mno int, 键名 类型

​ sno int,

​ primary key (mno), 设置主键

​ foreign key (sno) references marjor (sno) 设置外键 foreign key (外键名) references 外键的表 (外键)

}

查询

语句 作用
select * from 表名 查询表内所有项
select 键名带键名计算式 as 新列名from 表名 查询局部信息
select distinct 键名 或 带键名计算式 as 新列名from 表名 去重查询
select * from 表名 where 条件1 and 条件2 条件查询

where

1.where后如果有多个条件相与即&&,使用and相连,如果是相或即||,使用or相连

2.where后的条件如果是一个范围可以使用 键名 between 范围头 and 范围尾简洁实现

3.where后的条件如果是在枚举的几个要求中寻找,可以使用键值 in(枚举要求1,枚举要求2…)(本质是或,多个or)

4.where后的条件如果是排除枚举的几个要求后寻找,可以使用键值 not in(枚举要求1,枚举要求2…)(本质是或非,!(1or2))

5.where后如果要实现的效果是查找首字母相同的键值的效果,可以使用通配符%==实现,例如,

​ select * from stu where sname like ‘A%‘,这里的A%代表的意思是字符A+任意长度的任意字符

​ 如果要实现的是查找拥有第二个字符的键值可以使用_A%,其中的通配符_可以实现占位的效果,

​ 而查找查找的是只要拥有一部分字符串的键值,前后长度无要求可以使用%A%

6.like和=的区别

like和=的区别 什么情况下
无区别,等价 like后无通配符(%,_)
能用like,不能用= 条件为模糊查询,即有通配符

7.如果查询条件是找null键值的数据,不能使用=❗❗❗❗,只能用a is null的格式

增加

语句

语句 作用
alter table 表名 add constraint fk_表名 foreign key (外键名) reference 外键来源的表名(外键名) 增加外键
alter table 表名 add 键名 类型 增加新键名(列名)

删除

语句
alter table 表名 drop column 键名 删除键名(列名)
drop table 表名 删除图表
delete from 表名 where 条件 根据条件删除信息(假如删除的信息涉及到别的表外键的键值,得先置键值为null

插入

语句 作用
insert into 表名(键名1,键名2) values (对应值1对应值2) 插入信息(选择键名插入)
insert into 表名 values (对应值1对应值2…..,对应值n) 插入信息(内容得按照键名格式一个个列在values后)

更新(更改)

语句 作用
update 表名 set 键名= 更新的值 where 条件 更新(更改)数据

聚集函数

排序函数,实现升降序,一般位于查询语句的尾部

语句 作用
order by 键名 根据键名升序排列
order by 键名 desc 根据键名降序排列

聚集函数

聚集函数的使用位置一般位于查询语句的select ==这个地方== from 表名,用聚集函数包裹原来的键名,如果要去重也必须在函数内写,比如 select count (distinct sno) from stu

语句 作用
count(*) 统计一个表多少行
count(键名) 统计一个表里键名的值的个数(不为空)
sum(键名) 计算总共
avg(键名) 计算平均
max(键名) 计算最大
min(键名) 计算最小

分组函数

根据某个键名给查询结果分组,一般卸载查询尾部,必须配合聚合函数,可以使用where

语句 作用
select 键名1,聚合函数(键名2) from 表名 group by 键名1 给查询结果分组(分组函数的键名前面必须出现)

注意❗❗❗❗where子句不能用聚集函数作为条件表达式,要使用having,有having就必须前面有group by❗❗❗❗,

❗❗❗❗

情况 使用
语句中有聚集函数,比如sum等 必须group by + having
语句中不包含聚集函数 group by+ where单纯where

❗❗❗❗

例如:select sno,AVG(grade) from sc group by sno having AVG(grade) >= 90

多表查询

连接查询

类型 语句结构
主外键连接(等值连接) where 表1.主键 = 表2.相应外键 and 表2.外键 = ==表3.相应主键 查询条件
左外连接 from 表1 left outer join 表2 on 表1.主键 = 表2.相应外键

区别

方式 特点
主外键连接(等值连接) 使用两者主外键连接,适用于不需要保留空数据的方法
左外连接 假如想要保留某个表的数据,则将这个表左外连接到别的表,这样左边的表的数据哪怕不符合连接条件 也会保留,左外连接的条件使用on

嵌套查询

类型 语句结果
不相关嵌套查询 select 键名1 from 表1 where 表1主键 in (select 表一主键 from 表2 where 表2键名1 = 条件)
相关嵌套查询 select 键名1 from 表1 where 条件 in (select 表2键名1 from 表2 where 表1.主键 = 表2.外键)

区别

方式 特点
不相关嵌套查询 以一个查询获得结果作为条件进行的连接,即子查询不依赖父查询
相关嵌套查询 将连接放在子查询中

例如1.查询选修‘20201’学生的姓名sname

主外键连接:select sname from stu where stu.sno = sc.sno and sc.cno = ‘20201‘

不相关嵌套查询: select sname from stu where sno in (select sno from sc where cno = ‘20201‘)

相关嵌套查询:select sname from stu where ’20201’ in (select cno from sc where stu.sno = sc.sno)

❗❗❗❗❗派生表: 创建一个表方便对比之类的操作,select a from b,(select ….)as 派生表(派生表字段1,派生表字段2) where 条件

带有exists

exists更像是一个函数,在exists()中可以写查询语句,而exists会根据查询语句的结果是否存在返回true或false

例如:

查询选修‘20201’学生的姓名sname

带有exists:select sname from stu where exists(select * from sc where sc.cno = “20201” and sc.sno=stu.sno)

集合查询

union 并

例子:查询选修“20201”号课程或“2023”的学生学号

普通 =》 select distinct sno from sc where cno in ('20201','20203')

交 =》select sno from sc where cno ="20201" union select sno from sc where cno ="20203"

intersect 交

例子:查询年龄是18且mno = 1 的学生学号

普通 =》 select sno from stu where age = 18 and mno = 1

交 =》select sno from stu where age = 18 intersect select sno from stu where mno = 1

例子:查询选修“20201”号课程或“2023”的学生学号

普通 =》 select distinct sno from sc where cno ='20201' and cno = '20203'

交 =》select distinct sno from sc where cno ="20201" intersect select distinct sno from sc where cno ="20203"

except 差

例子:查询年龄是18且mno = 1 的学生学号

普通 =》 select sno from stu where age = 18 and mno = 1

差 =》select sno from stu where age = 18 except select sno from stu where mno != 1

视图

视图是从一个或几个基本表(或视图)导出的表。不同的是,它是一虚表,数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍然存放在原本的基本表中。所以一旦基本表发生变化,从视图中查询的数据也就随之改变。

作用之一:视图更加方便用户的查询

create view 视图名字 as 查询语句

更类似于将查询语句获得的数据的地址进行读取后按照表的方式排列储存,获得一个快捷找到这个表的方式,不用再用复杂查询语句去查询,直接查视图即可

1.视图指向表的数据,表变视图变

2.创建视图的表每个列都必须有列名

存储过程

存储过程是事先经过编译并保存再数据库中的一段sql语句集合,使用时调用即可

框架结构

create proc 存储名 @变量1 类型,@变量2.。。。。

as

begin

select .......

end

调用

exec 存储名 

标签:语句,键名,sno,笔记,查询,SQL,where,select
From: https://www.cnblogs.com/Agnoi/p/17896767.html

相关文章

  • NodeJs学习笔记
    目录NodeJsBuffer(缓冲区)概念特点使用计算机基础进程与线程fs模块写入文件①.writeFile异步写入②.writeFileSync同步写入③.appendFile/appendFileSync追加写入④.createWriteStream流式写入需要写入文件的场景文件读取①.readFile异步读取②.readFileSync同步读......
  • Oracle 表空间常用SQL
    --1、查看表空间的名称、大小、剩余空间SELECTt.tablespace_nameas表空间名,round(SUM(bytes/(1024*1024)),0)as大小_MFROMdba_tablespacestinnerjoindba_data_filesd on t.tablespace_name=d.tablespace_nameGROUPBYt.tablespace_name;--2、查看表空间物理......
  • Django 创建项目时找不到数据库sqlite3,提示no changes detected
    原因:PyCharm创建Django项目,找不到数据库sqlite3 解决:如果没有默认的db文件,则应在PyCharm终端中执行以下命令:pythonmanage.pymakemigrations:提示pythonmanage.pymigrate ......
  • [极客大挑战 2019]HardSQL
    SQL注入,猜测后台代码类似 SELECTidFROMtable_nameWHEREusername=input1ANDpassword=input2;发现过滤了空格比较符号和大部分函数名,但是没有过滤关键字。使用1'OR(true)#万能密码尝试登录,显示登录成功,判断可以进行布尔盲注。构造如下语句,更改left参数与减去的字符......
  • 用pyodbc 代替 pymssql 连接 mssql
    之前用pymssql换个python版本就运行不了换了pyodbc并且指定odbcdiver就好了风波老师指出原因需要指定odbcdriver#!/usr/bin/envpython#coding:utf-8importpyodbcimportpandasaspdstatement=#创建连接字符串conn_str=#创建连接con=pyodbc.connect(......
  • js笔记
    js基础javascript是基于对象和事件驱动的脚本语言。//直接在页面中嵌入脚本<script>alert('弹窗警告');document.write("在浏览器上输出文字");console.log("这句话会在控制台显示,在浏览器上按f12呼出控制台");</script>//引用外部脚本,注意:此处只能使用相对路径,或网络路......
  • 42K+ star!开源Notion 平替笔记推荐
    IT咖啡馆,探索无限可能!恭喜你发现了这个宝藏,这里你会发现优质的开源项目、IT知识和有趣的内容。今天我们来推荐一款在GitHub超过43KStar的开源项目:AppFlowy。提到笔记和知识管理,很多人都会想到大名鼎鼎的Notion,无论是项目管理、笔记整理,还是团队合作,Notion都以直观、灵活的界面满......
  • 动态SQL——A表的数据作为B表的字段
    需求: A表:idcol id:主键 col:存放col的code值(1,2,3,4...) B表:idcol1col2col3col4... id:主键 col1:存放的col1的内容... col2:存放的col2的内容... col3:存放的col3的内容... col4:存放的col4的内容...希望查询相同id里的col1,col2,col3的值,如果这个col在A表中......
  • 硬件开发笔记(十六):RK3568底板电路mipi摄像头接口原理图分析、mipi摄像头详解
    前言  本篇继续分析底板原理图mipi电路原理图、mipi摄像头输入硬件接口详解。<br>RK3568芯片摄像头接口  查看RK3568的芯片手册,摄像头接口并不支持直接sensor模拟信号输入,只能接收mipi信号,RK3568的摄像头接口引脚如下:    只支持mipi的数字信号摄像头。  本来计划......
  • 硬件开发笔记(十六):RK3568底板电路mipi摄像头接口原理图分析、mipi摄像头详解
    前言  本篇继续分析底板原理图mipi电路原理图、mipi摄像头输入硬件接口详解。 RK3568芯片摄像头接口  查看RK3568的芯片手册,摄像头接口并不支持直接sensor模拟信号输入,只能接收mipi信号,RK3568的摄像头接口引脚如下:    只支持mipi的数字信号摄像头。  本......