1.简单查询
2.聚合函数查询
3.子查询
4.内外连接
5.三大范式
6.事务
7.视图
8.索引
9.补充内容
1.查询所有字段 查询需要查的字段
select * from where
2.取别名
3.条件查询
4.逻辑运算符 and / or / not
5.去重 distinct 按字段去重查询 from 表名
6.模糊查询 like %:任意个字符 _:有且仅有一个字符
7.between and 查询某个闭区间 [22,40]
查询年龄>=20 且 <=40的学生名字
select * from student where sage between 22 and 40
8.in 在什么里面 not in 不在里面
查找年龄在 18 19 21 22 的女生
select * from student where sage not in (18,19,21,22) and ssex = "女"
9.is null 查找某字段为空的数据
select * from student where ssex is null
select * from student where ssex is not null
select * from student where not ssex is null
10.分页查询
参数1 :从哪一条数据开始查 参数2 :需要查询的记录数
select * from student limit 0,5
11.排序查询
默认升序 :asc 降序 :desc
select * from student order by sage asc,sid desc
select * from student order by sage desc
求最值
select max(字段名) from stu
select min(字段名) from stu
总和:sum( )
统计数据条数:select count(*) from stu 注意:null不统计
平均值:avg( )
分组查询:group by
select sid,sname,sum(score) from stu group by sname
过滤聚合函数 : having
select sid,sname,min(score) from stu
group by sname having min(score)>60
where :过滤结果集,放在from后面,执行时机早
having :专门用于过滤聚合函数结果集,放在group by 后面
在group by之后执行
它们不能相互替换
关键字的书写顺序
select–>distinct -->from -->where -->group by -->having -->order by -->limit
执行顺序
from -->where -->group by -->having -->select -->distinct -->order by -->limit
如果查询多个表,在from后面的表名使用逗号隔开
n个表至少有n-1个条件 不加连接条件会产生笛卡尔积
in 子查询
子查询:
将查询结果作为一张表来使用
将查询的结果作为条件使用
查看平均成绩大于60的所有学生名字
select sname from student where sno in (
select sno from sc where score>60
)
1.连接多表,就是单表查询
2.子查询
将查询的结果作为条件使用
将查询的结果作为表使用
exists
select * from sc where exists (条件,若为true则执行前面的查询)
实例: select * from sc where exists (
select * from sc where sno = "s001"
)
any
score > any (12,432,51) 大于最小值
score < any (12,432,51) 小于最大值
score = any (12,432,52) 等价于 in
all: > <
score > all(10,5,10,30) 大于最大值
score < all (10,5,10,30) 小于最小值
left join :左外连接
right join : 右外连接
inner join : 内连接
内连接 :和前面的多表连接效果一样,都是将可以匹配的数据连接显示
select * from student inner join sc on student.sno=sc.sno
左外连接 :以左表为基表,基表中的数据会全部显示
select * from student left join sc on student.sno=sc.sno
右外连接 :以右表为基表,基表中的数据会全部显示
select * from student right join sc on student.sno=sc.sno
连接四个表,并且显示所有学生的信息
select * from student left join sc on
student.sno=sc.sno left join course on
sc.cno=course.cno left join teacher on
course.tno=teacher.tno
为了建立冗余较小,结构合理的数据库
设计数据库时必须遵守一定的规则
在关系型数据库中这种规则就称为范式
第一范式 1NF
确保每列的原子性
第二范式 2NF
确保每一个实体可以唯一区分,前提需要主键
每一列都和主键完全相关而不是和主键的某一列相关
每张表中只有一类实体,如果有其他的实体,需要分离出新表
如果多对多关系,需要一张中间表
第三范式 3NF
每一列都必须和主键直接相关,不能间接相关
事务 :事务是一个最小的执行单元
里面的代码功能要么同时成功,要么同时失败
程序中转账:数据库中两个账户,一个减钱,一个加钱
不能同时执行,只能按照步骤一步一步执行
事务的特性
原子性 :一个事务是一个最小执行单元,就像一个原子不可再分割
里面的内容要么同时成功,要么同时失败
一致性 :表示数据前后总量不发生变化
隔离性 :多个事务同时操作,需要有隔离级别
持久性 :对数据的操作是永久性的,保存到介质上
隔离等级
读未提交 :脏读 不可重复读 幻读
读已提交 :不可重复读 幻读
可重复读 :幻读 mysql默认的隔离级别
串行化 :排队 不会出现问题,效率低
不同隔离等级可能会出现的问题:脏读 不可重复读 幻读
实例:小明给小李转账 100
#开启事务
start transaction
update money set my_money = my_money-100 where sname = "小明";
update money set my_money = my_money+100 where sname = "小李"
-- 如果没有出现异常,提交事务
commit
-- 如果中途出现了异常,回滚到开启事务之前
rollback
查询出钱小于 6000 的同学,然后修改他的钱 +100
update money set my_money=my_money+100 where sname in(
select * from(
select sname from money where my_money < 6000
) as aa
)
#每一个派生出来的表都必须有一个自己的别名
程序开发过程中,有的查询语句可能非常复杂,花费的时间很多,
而且使用的频率较高
视图 :将某些复杂的查询结果保存为一个视图,后面如果需要使用这里面的数据,直接查询视图即可,不用再去查询复杂的sql语句,视图本身不是表,只是数据的一种表现形式,我们不可以像操作表一样操作视图。
作用 :用于提高查询速度
注意 :不能对视图的数据进行增删改操作,只用于查询
– 创建视图
create view money_view as
select * from money where my_money > 6000
– 查询视图
select * from money_view
– 删除视图
drop view money_view
索引 index :数据表中的一部分,目的是提高查询的效率
通俗理解:表如果是一本书,索引就是目录
如果没有创建索引,会去遍历所有数据查询需要的结果
什么时候使用索引
在数据量非常大的情况下,需要出现在where或者order by后面的字段
可以设置索引
索引在增删改的时候,索引文件也会相应的改动,如果一个表经常需要
增删改,那么谨慎设置索引
创建索引
create index index_id on index_table (sid)
删除索引
drop index index_id on index_table
有一个订单表orders,其中记录有各订单的总金额total,同时还有一个订单明细表order_detail,其中记录有各订单每一产品的金额小计 subtotal,假设我们需要检查这两个表的金额合计是否相符,可能就需要执行如下两条SQL:
Select sum(total) from orders;
Select sum(subtotal) from order detail;
此时需要给查询语句加读锁,避免在查询的时候其他线程对其数据进行了修改
Lock tables orders read ocal order detal read local;
Select sum(total) from orders;
Select um(subtotal) from order detail;
Unlock tables;
从http://git.chromium.org/gitweb/?p=webm/bindings.git;a=blob_plain;f=JNI/README.Android开始进行一些调整以便于阅读.>创建{project} / jni文件夹.>获取JNI绑定.git clone 07001>获取libvpx.git clone 07002>为Android配置libvpx..._app中vp8
Vector SpacesFinite-Dimentional Vector SpacesLinear MapsPolynomialsEigenvalues, Eigenvectors, and Invariant SubspacesInner Product SpacesOperators on Inner Product SpacesOperato..._线性代数应该这么学-高清带完整目录
作者:记忆的森林转自:http://www.cnblogs.com/leonwang/archive/2011/08/12/2136657.html前段时间看见别人写的一篇 c#调用网络摄像头的,正好搬到的新的地方,这地儿洗脸的地方木有镜子用,每天起床,头发总是很乱,也不想专门去超市买个镜子,又正好笔记本上有个摄像头,平时也木有MM跟偶视频聊天,纯粹的浪费了一个多好的功能,_我的c#vs2019 调用笔记本摄像头
你是否在上大学时给四年后的自己写过一篇规划,或者一封信什么的,当你结束时你有什么感觉呀?我们给未来自己写的信只适合现在的你首先是对未来的憧憬,设想一下未来的自己会怎么样,跟着自己的现在的所见所想给自己设置的形象,有用吗?当然有用,它可以给你行动力,让你为了成为更好的自己不断的优化自己,再问问自己真的有用吗?实际上用处并不是很大,4年的变化还是很大的,现在你设想的只是现在这个状态和思维下的自己,所以...
python每个类可以拥有一个或者多个父类,它们从父类那里继承了属性和方法。如果一个方法在子类的实例中被调用,或者一个属性在子类的实例中被访问,但是该方法或属性在子类中并不存在,那么就会自动的去其父类中进行查找。 继承父类后,就能调用父类方法和访问父类属性,而要完成整个过程,子类是需要调用父类的构造函数的。 子类不显式调用父类的构造方法,而父类构造函数初始化了一些属性,就会出现问题 如果子类和_python初始化子类的时候为什么只能传父类的参数
fedora下的vim和gdb安装可以通过yum方式安装,这里不在说了,主要是vimgdb安装,在http://www.vim.org/scripts/script.php?script_id=3039下载vimgdb.tar.gz,按照官方的说法,解压该文件,复制vimgdb、vimgdb_msg到任意的系统路径目录(即$PATH目录),然后复制vimgdb.vim 到 ~/.vim/mis..._fedora怎么调试vim
使用AW9523B芯片驱动16路LED时,某些LED误点亮的问题_aw9523b
misdb---->webdb1.建立目标数据库,webdb 例:db2 create db webdb2.在源数据库中导出教表得DDL语句 例:db2look -d misdb -e -a -o c:/test.sql -i db2inst1 -w db2manager 参数说明: -e: 抽取复制数据库所需要的 DDL 文件 -o: 将输出重定向到给定的文件名 -i: 登录到数_dbvisualizer备份表数据sql
INCLUDEPATH+="C:\DCMTK\Out-Debug-x64\include"LIBS+= -L$$quote("C:/DCMTK/Out-Debug-x64/lib/")LIBS+=cmr.lib \dcmdata.lib \dcmdsig.lib \dcmect.lib \dcmfg.lib \dcmimage.lib \dcmimgle.lib \dcmiod.lib \dcmjpeg.lib \dcmjpls.lib \dcmnet.lib \dcmpmap.l_qt dicom
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------流程控制c语言中有3中结构控制程序运行1> 顺序结构:默认的流程结构,按照书写的顺序执行每一条语句2> 选择结构:对给定的条件进行判断,在根据判断结果来决定来执行哪一段代码3> 循环结构:在给定条件成立的情况下,反复执行某一段代码1.选择结构if语句...
#include #include #include #include #include #include #include // 参考:http://www.cnblogs.com/haippy/p/3284540.htmlnamespace thread_lock {std::mutex g_io_mutex;//------------------------_m_waitingadditemsmutex.lock();
复习工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类UML代码class User{ private int _id; public int Id { get => _id; set => _id = value; } private string _name; public string Name { ge..._c#反射和工厂模式的区别