首先的首先,恒大威武!

开始正题。

关系代数:

目前主流的关系型数据库,是建立在关系代数的基础上的,即他的数学支撑是关系代数。

关系代数主要包括如下几个二目运算:并运算union、交运算intersection、差运算difference、笛卡尔积Cartesian Product.

这里需要留意的是,笛卡尔积严格的说是广义的笛卡尔积,因为在关系型数据库中的笛卡尔积的元素是元组,所谓元组,直白的解释就是数据库中的一行,每一行是一个元组。

数据库中专门的关系运算有如下几个:选择selection、投影projection、链接join、除运算division。

SQL:

SQL,即结构化查询语言,书关系型数据库的标准语言,但是每个厂商基于这个标准会有一套自己的实现。比如oracle的和mysql的。

SQL主要有三大块:DDL和DML和DQL。

    • DDL:数据定义语言,包括create、drop等
    • DML:数据操作语言,包括insert、update、delete等
    • DQL:数据查询语言,包括select、where、order by等

DDL:

创建数据库:create database 数据库名

撤销数据库:drop database 数据库名 [cascade|restrict]

    • cascade模式:直接删除数据库及其所有的表、视图、索引等元素
    • restrict模式:只有当数据库中没有任何元素的时才会删除,否则拒绝执行

创建数据表:create table 表名 列名

修改数据表:alter table 表名 [add 新列名][drop 完整性约束][alter column 列名]

删除表:drop table 表名 [cascade|restrict]

删除表时,不仅表的数据和定义被删除,相关的视图索引触发器也都被删除

  DQL:

select语句:

  select 列 from 表 where 条件表达式 group by 列名 having 条件表达式 order by 列名 asc|desc

  and和or可以连接多个查询条件,and的优先级比or高,但是可以用括号改变优先级

聚集函数:

  count([distinct|all] *|列名) 统计个数

  sum([distinct|all] 列名) 求和

  avg([distinct|all] 列名) 求平均

  max([distinct|all] 列名) 求最大值

  min([distinct|all] 列名) 求最小值

  如果指定distinct短语,则在计算时会取消列中的重复值,如果不指定distinct或者指定all(默认是all),则表示不取消重复值。

分组语句:

  分组语句主要是group by子句和having子句。

  例如:查询选修了三门课以上课程的学生学号:

    select sno from sc group by sno having count(*)>3

  group by子句将查询结果按照指定列或多列分组,值相等的为一组。

  需要注意的是,数据分组后,聚集函数将作用于每一个组,即每个组都有一个函数值。上例中的count是对每一个group后的组做count。

  having子句都是跟groupby子句连用,按照自定的条件对组进行筛选,得到满足条件的组。

having子句和where子句的区别是作用对象不同,where子句的作用对象是表中的记录,即元组,筛选满足条件的元组,而having子句的作用对象是groupby后的组,筛选满足条件的组。

多表连接查询:

  两表连接:

    select * from s,sc where s.no=sc.no

  自身连接:一个表与其自己进行连接,称为表的自身连接

    查询每一门课程的间接先修课,即先修课的先修课。

    select first.cno,second.cpno from c first, c second where first.cpno=second.cno

  外连接:

正常的连接操作,只会把满足条件的元组输出,如果想把连接的左表右表中不满足条件的元组也作为结果输出,在无值属性上填空值null,这种连接就叫外连接。关键字join|out join

  左外连接:列出左边表的所有元组,叫做左外连接,关键字left join|left out join

  右外连接:列出右边表的所有元组,叫做右外连接,关键字right join|right out join

  例子:

  select * from s left out join sc on(s.sno=sc.sno)

  select * from s left out join sc using(sno)

嵌套连接查询:

  写几个嵌套查询的例子,看了应该就懂了。

      • select name from s where sno in (select sno from sc where cno='2')
      • select sno,cno from sc x where grade>=(select avg(grade) from sc y where y.sno=x.sno)

  ANY(SOME) ALL关键字:

子查询返回单值时可以用比较运算符,如上面的>=,如果返回的是多值就没法用比较运算符,得用ANY(有的系统是some)或者all关键字,这两个关键字必须跟比较运算符连用来表达语义,any表示某个,all表示所有,主要的语义如下:

>any    大于子查询结果中的某个值

>all     大于子查询结果中的所有值

<any    小于子查询结果中的某个值

<all     小于子查询结果中的所有值

写几个例子:

  查询其他系中比计算机系某一学生年龄小的学生姓名和年龄

  select name,age from s where age<ANY(select age from s where dept='cs') and dept<>'cs'

  查询其他系中比计算机系所有学生年龄小的学生姓名和年龄

      select name,age from s where age<ALL(select age from s where dept='cs') and dept<>'cs'

  exists谓词的子查询

    exists谓词的子查询不返回任何数据,只是产生逻辑真true和逻辑假false。

    例如:查询所有选修了1号课程的学生姓名:

    select name from s where exists (select * from sc where sno=s.sno and cno='1')

    只要子查询结果非空,则where子句就是true,否则就是false.

集合操作:

  select语句的结果是元组集合,所以多个select语句可以进行集合操作,集合操作主要有求并union、求交intersect、求差except

  写几个例子:

  select from s where dept='cs' union select from s where age<19

  select from s where dept='cs' intersect select from s where age<19

DML:

  insert:

    普通插入:insert into s(a,b,c) values(1,2,3)

    子查询插入:insert into s(a,b) select a,b from y.把子查询嵌套在insert语句中,生成需要插入的批量数据

  delete:

    普通删除:delete from s where a='1111'

    在查询删除:delete from sc where 'cs' = (select dept from s where s.sno=sc.sno) 删除计算机系所有学生的选课记录

  update:

    普通修改:update s set age=22 where sno='12345'

    子查询修改:update sc set grade=0 where 'cs' = (select dept from s where s.sno=sc.sno) 设置计算机系学生成绩为0

周天宅家码了一些SQL方面的基础知识和细节,有用请点赞,哈哈。

最后的最后,还是恒大威武!

恒大威武!关于SQL的一些基础知识整理回顾的更多相关文章

  1. 【OGG】OGG基础知识整理

    [OGG]OGG基础知识整理 一.GoldenGate介绍 GoldenGate软件是一种基于日志的结构化数据复制软件.GoldenGate 能够实现大量交易数据的实时捕捉.变换和投递,实现源数据库与 ...

  2. Kali Linux渗透基础知识整理(四):维持访问

    Kali Linux渗透基础知识整理系列文章回顾 维持访问 在获得了目标系统的访问权之后,攻击者需要进一步维持这一访问权限.使用木马程序.后门程序和rootkit来达到这一目的.维持访问是一种艺术形式 ...

  3. Kali Linux渗透基础知识整理(二)漏洞扫描

    Kali Linux渗透基础知识整理系列文章回顾 漏洞扫描 网络流量 Nmap Hping3 Nessus whatweb DirBuster joomscan WPScan 网络流量 网络流量就是网 ...

  4. java部分基础知识整理----百度脑图版

    近期发现,通过百度脑图可以很好的归纳总结和整理知识点,本着学习和复习的目的,梳理了一下java部分的知识点,不定期更新,若有不恰之处,请指正,谢谢! 脑图链接如下:java部分基础知识整理----百度 ...

  5. 数据库和SQL面试题基础知识(持续更新)

    数据库方面基础知识复习 常问小问题: 一.like查询大小写问题: sql查询结果去重 SELECT distinct name FROM 表:平均数avg 一.like查询大小写问题: ①用bina ...

  6. Oracle ASM 磁盘组基础知识整理(收藏版)

    转至:https://cloud.tencent.com/developer/article/1494403 为什么要写这么一篇基础知识呢?还是有那么一点点原因的,不是胡编乱造还真是有真实存在的事件的 ...

  7. Linux基础知识整理

    一.基础知识 1.Linux简介 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的UNIX工具软件 ...

  8. wifi基础知识整理

    转自 :http://blog.chinaunix.net/uid-9525959-id-3326047.html WIFI基本知识整理 这里对wifi的802.11协议中比较常见的知识做一个基本的总 ...

  9. JavaScript基础知识整理

    只整理基础知识中关键技术,旨在系统性的学习和备忘. 1.在 JScript 中 null 和 undefined 的主要区别是 null 的操作象数字 0,而 undefined 的操作象特殊值NaN ...

随机推荐

  1. 真机调试watch的一系列bug

    真机调试watch的一系列bug 系列一 WatchKit 2.0 app's bundle ID com.jiaoshi.memoKB is not prefixed by the parent a ...

  2. [svn]显示日志很慢 点击文件查看更改记录也贼慢

    特此记录,防止以后忘记. 解决办法: 在 C:\Windows\System32\drivers\etc (win7) 中加入 即可 亦或将代码的url中pc名字改为ip地址也可以解决问题 对文件夹点 ...

  3. CodeForces - 258D:Little Elephant and Broken Sorting(概率DP)

    题意:长度为n的排列,m次交换xi, yi,每个交换x,y有50%的概率不发生,问逆序数的期望  .n, m <= 1000 思路:我们只用维护大小关系,dp[i][j]表示位置i的数比位置j的 ...

  4. BZOJ1030 JSOI2007 文本生成器 【AC自动机】【DP】*

    BZOJ1030 JSOI2007 文本生成器 Description JSOI交给队员ZYX一个任务,编制一个称之为"文本生成器"的电脑软件:该软件的使用者是一些低幼人群,他们现 ...

  5. cv.Mat 与 .txt 文件数据的读写操作

    1.按OpenCV格式实现的 .txt 文件读写 可以用 cvSave 和 cvLoad 实现,格式和 .xml/.yml 的差不多,不过如果专用与 OpenCV 的数据读写,还是用  .xml/.y ...

  6. elixir 几种安装方式

    1. yum yum 源(直接放弃,版本太老)   2. 使用预编译包 wget https://github.com/elixir-lang/elixir/releases/download/v1. ...

  7. 使用AWK分析Oracle系统锁定、Hang状态

    在早期Oracle版本中,由于技术不成熟等原因,数据库锁定和僵死状态还是时有发生的.对待这些问题,老先生们的处理策略无外乎是“重启”和“考究”两种策略.所谓“重启”,通过强制的重启服务器或者数据库,将 ...

  8. C# WinForm页面切换导致闪烁的解决方法(转)

    问题描述 界面上放置大量的控件(尤其是自定义控件)会导致在窗体加载时,速度变得缓慢:当切换页面时,也会时常产生闪烁的问题,非常影响用户体验. 解决方法 将此代码写在要解决闪烁问题的父窗体中: prot ...

  9. 关于ng-class,ng-style的用法

    ng-class的使用几种方式 (1):利用双向数据绑定(className根据chang2的值去匹配类) <div class="{{className}}">... ...

  10. jeecg中一对多的关系映射

    1.首先看一张前端页面: 有一张主表和3张子表,显示这3张子表的代码如下 <t:tabs id="tt" iframe="false" tabPositi ...