SQL语句的学习

要交作业了,刚好把SQL查询语句的内容写成笔记,以后好查看。水一下

单表查询

DISTINCT:去掉结果中的重复行作用,将DISTINCT关键字放在select的后面、目标列名的前面

where子句:查询满足条件的元组的操作类似于关系代数中的选择运算

​ 比较大小:<(小于)、>(大于)、=(等于)、<=(小于或等于)、>=(大于或等于)

​ 确定范围:between 下限值 and 上限值(在下限值和上限值之间的值结果为True)、not between 下限值 and 上限值(不在下限值和上限值之间的值结果为True)

​ 确定集合:in (x1, x2, ...)(运算符,列中的值与集合中的某个常量值相等时,结果为True)、not in (x1, x2, ...)(运算符,列中的值与集合中的某个常量值相等时,结果为False)

​ 字符串匹配:LIKE xxxx(运算符),匹配字符串中的4种通配符:_(下划线,匹配任意一个字符)、%(百分号,匹配0到多个字符)、[](匹配[]中的任意一个字符,可以使用"-"连接字母)、[^](不匹配[]中的任意一个字符,可以使用"-"连接字母);转义字符:ESCAPE %(转义字符时使用,将匹配字符串该字符后一位字符视为普通字符,而不是通配符)

​ 涉及空值的查询:is NULL(存在空值)、is not NULL(不存在空值)

​ 多重条件查询:使用or和and

order by子句:order by 列名 s(列名为依据排序列,s可以为ASC表示按列值进行升序排序,或者DESC表示按列值进行降序排序,当没有指定排序方式,默认为升序);CTF小技巧:使用order by x(x代表数字,判断表中的列数)

聚合函数:统计函数,其作用对一组值进行计算并返回统计结果。(where语句用不了)

​ count(*):统计表中行数

​ count([DISTINCT] 列名):统计本列的列值个数,加上DISTINCT后计算本列中不重复的列值个数

​ sum(列名):计算列值的和

​ avg(列名):计算列值的平均数

​ max(列名):得到本列的最大值

​ min(列名):得到本列的最小值

GROUP BY子句:对数据进行分组。语法:GROUP BY 分组依据列

HAVING子句:用于对分组后的统计结果再进行筛选,一般与GROUP BY合在一起使用。语法:HAVING 运算表达式

多表查询

内连接

连接操作写在JOIN子句中,此处使用ANSI连接方式。

语法:from 表1 [INNER] JOIN 表2 ON 连接条件(连接条件:表1.列 = 表2.列)

自连接

一种特殊的内连接

语法:from 表1 as C1 JOIN 表2 as C2 ON 连接条件

感觉与内连接无差别,就是更改了原表的命名

外连接

外连接只限制了一张表中的数据必须满足连接条件,而另一张表中的数据不必满足连接条件。还是使用ANSI的方式

语法:FROM 表1 LEFT | RIGHT [OUTER] JOIN 表2 ON 连接条件

LEFT为左外连接,限制表2;RIGHT为右外连接,限制表1

TOP限制结果集行数

TOP子句用于不是看全部结果的情况下

语法:TOP n [percent] [WITH TIES]

n:非负整数

TOP n:取查询结果的前n行数据

TOP n percent:取查询结果的前n%行数据

WITH TIES:包括并列的结果

位于SELECT后,如果存在DISTINCT的话,放在该单词后面

子查询

WHERE子句中的子查询通常有以下几种形式:

WHERE 列名 [not] in (子查询)

WHERE 列名 比较运算符 (子查询)

WHERE EXISTS (子查询)

数据更新

插入数据

单行插入:INSERT [INTO] <表名> [(<列名表>)] VALUES (插入数据)

多行插入:INSERT [INTO] <表名> [(<列名表>)] SELECT语句-->用法是将select查询产生的结果集插入到表中

更新数据

​ 通过使用UPDATE语句进行数据更新

​ 语法:UPDATE <表名> SET <列名> = {表达式|数据|NULL} [, ... n] [FROM <条件表名> [, ... n]] [WHERE <更新条件>]

​ 使用FROM时,表名使用了多表连接形式实现数据更新;使用WHERE时,为有条件的进行数据更新

删除数据

​ 通过使用DELETE语句进行数据删除

​ 语法:DELETE [FROM] <表名> [FROM <条件表名> [, ... n]] [WHERE <更新条件>]

​ 在不使用FROM和WHERE时,会将表删成空表;使用FROM时,表名使用了多表连接形式实现数据删除;使用WHERE时,为有条件的进行数据删除

索引

​ 找时间复习

视图

​ 视图是外模式对应到关系数据库中的概念。由从数据库的基本表中选取出来的数据组成的逻辑窗口,是基本表的部分行和列数据的组合。视图是一个虚表,数据库中只存储视图的定义,而不存储视图所包含的数据,数据仍然存在原来的基本表中,这样有两个好处:1)视图数据始终与基本表数据保持一致。2)节省存储空间。

定义视图

​ 使用CREATE VIEW语句定义视图,语法为:CREATE VIEW <视图名> [ (列名 [, ... n]) ] AS SELECT语句

注意

​ 1)SELECT语句中通常不包含ORDER BY和DISTINCT子句。

​ 2)关于列名,要嘛全部指定,要嘛全部省略,不可以只指定部分列名。

​ 3)必须明确指定组成视图的所有列名的三种情况:a.某个目标列不是简单的列名,而是函数或表达式,并且在SELECT语句中没有为这样的列指定别名;b.多表连接是选出了几个同名列作为视图的列;c.视图中为某列选用其他更适合的列名。

定义单源表视图:指视图中行列子集取自一个基本表的部分行和列,这种方式定义的视图一般支持通过视图对数据进行查询和修改操作。

定义多源表视图:指视图中行列子集取自查询语句涉及的多张表中的数据,这种方式定义的视图一般只用于查询,不用于修改数据。

在已有的视图上定义新视图:除了基本表,视图的来源也可以是已经建立的视图。但是当数据来源的视图被删除时,则以此为基础建立的视图也无法使用。

定义带表达式的视图:定义视图时可以根据需求设置一些派生属性列,在这些派生属性列中保存为表达式计算的值。此时这些列被称为虚拟列。

含分组统计信息的视图:指定义视图的查询语句中含有GROUP BY子句,该种视图只用于查询而不用于修改数据。

通过视图查询数据

​ 与一般SQL查询语句无异。不过多介绍。由于SQL中存在一些复杂的查询,在一句SQL语句中很难直接实现,通过视图的方式进行分步骤查询的方式达到目的。

修改和删除视图

修改视图

​ 使用ALTER VIEW语句进行修改视图,语法:ALTER VIEW <视图名> [ (列名 [, ... n])] AS SELECT语句

​ 用法与定义视图的语法无异,不过是将CREATE VIEW改成了ALTER VIEW

删除视图

​ 使用DROP语句进行删除视图,语法:DROP VIEW <视图名>

视图的作用

​ 1)简化数据查询语句

​ 2)使用户能从多角度看待同一数据

​ 3)提高了数据的安全性

​ 4)提供了一定程度的逻辑独立性

本文作者:erR0Ratao

本文链接:https://www.cnblogs.com/erR0Ratao/p/13874243.html

SQL语句的学习的更多相关文章

  1. 标准sql语句,学习

    标准SQL语句总结标准SQL语句总结,标准SQL语言基本上适用于下面所列出的数据库软件 -------------------------------------------------------- ...

  2. sql语句的学习(1)

    一.创建表 CREATE TABLE `student` ( `id` ) NOT NULL AUTO_INCREMENT, `name` ) DEFAULT NULL COMMENT '姓名', ` ...

  3. (转)新手C#SQL语句的学习2018.08.13

    1.创建数据库(create) CREATE DATABASE database-name 2.删除数据库(drop) drop database dbname 3.备份数据库 --- 创建 备份数据 ...

  4. Oracle PL/SQL语句基础学习笔记(上)

    PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE server和其它工具中了,近几年中很多其它的开发者和DBA開始使用PL/SQL,本文将讲述PL ...

  5. SQL语句优化 学习笔记

    sql语句时间花在哪了? 1 等待时间 2 执行时间 这两个时间并非孤立的,单条语句执行的快 其他语句等待的时间就少 执行时间花在哪了? 1 查找 沿着索引查找 慢者可能全表扫描 2 取出 查到行后, ...

  6. sql语句的学习(2)

    7.统计:学号.姓名.语文.数学.英语.总分.平均成绩 8.列出各门课程的平均成绩.课程,平均成绩 9.列出数学成绩的排名(要求显示字段:学号,姓名,成绩,排名) 10.列出数学成绩在2-3名的学生( ...

  7. SQL语句的学习理解

    1.手电筒当天下载自定义活跃: SELECT user_dim.app_info.app_instance_id FROM [flashlight35-6aae4:com_scroll_sos_fla ...

  8. oracle 11g SQL语句补充学习

    添加列: alter table tablename add columnName datatype (not null);        -------需要注意一点的是在添加一列为非空的时候, 表必 ...

  9. Oracle学习中,重点是sql语句的学习,而所有的sql语句都要在scott用户下完成。

    熟悉这个用户下的四张表,是必要的. 查看所有表名: SELECT * FROM tab; 查看每张表的结构: DESC 表名称: 1.部门表:dept no  名称 类型 描述 1 DEPTNO NU ...

随机推荐

  1. IDEA出现Error Loading Project: Cannot load module xxx报错

    IDEA出现Error Loading Project: Cannot load module xxx报错,是因为IDEA不能找到模块xxx加载,应该是添加/新建了xxx模块,之后又删除了该模块,但没 ...

  2. CAP-微服务间通信实践

    微服务间通信常见的两种方式 由于微服务架构慢慢被更多人使用后,迎面而来的问题是如何做好微服务间通信的方案.我们先分析下目前最常用的两种服务间通信方案. gRPC(rpc远程调用) gRPC-微服务间通 ...

  3. JS之关于函数

    Javascript的函数也是一个对象 function test() { ... } var test = function(){ ... } 函数内部一旦执行return,则函数执行完毕,如果没有 ...

  4. python中的多(liu)元(mang)交换 ,赋值

    多元赋值 顾名思义 同时对多个变量赋值 长话短说 举例: int x = 1 int y = 2 x,y = y ,x 这种写法可以直接交换x,y的值 非常方(liu)便(mang) 也就是 y=1 ...

  5. Javascript中this作用域以及bind方法的重写

    这是一个最近遇到的笔试题,出于尊重,不会说出该公司的名字,源于自身比较少,笔试题是将bind方法用ES3重写,使用bind这个方法,导致一时半会懵了,只记得bind可以改变this的作用域. 作为查漏 ...

  6. 晚间测试13 A. Dove 打扑克 vector +模拟

    题目描述 分析 这道题比较关键的一点就是要看出最终牌数的种类数不会超过 \(\sqrt{n}\) 种 知道了这个性质我们就可以用 \(vector\) 维护一个有序的序列 \(vector\) 中存放 ...

  7. GPRS DTU的工作原理和应用场景有哪些

    GPRS DTU是属于物联网无线数据终端设备的中一种,它主要是利用公用运营商的GPRS网络(又称G网)来为用户提供无线长距离数据传输的功能.一般都是采用的高性能工业级8/16/32位通信处理器和工业级 ...

  8. Ubuntu Kylin 部署 .Net Core 应用程序

    前几日在头条上看到了 优麒麟(https://www.ubuntukylin.com/) ,出于好奇,就下载安装玩玩,整体感觉不错.当然这不是重点,重点是要在它上面部署的.Net Core 应用程序. ...

  9. Java学习的第四十天

    1.例4.1在其他函数中调用主函数 package bgio; public class cjava { public static void main(String[] args) { prints ...

  10. sort回调的简单模拟

    本来是准备讲CPP中的std::sort,但因为最近Java用得多,不知怎么的便习惯性走Java角度看问题了,所以这篇文章看起来估计会有点奇怪... 一.简单模拟sort回调 std::sort函数本 ...