首页 > 数据库 >(未完成)结构化查询语言SQL

(未完成)结构化查询语言SQL

时间:2022-11-01 23:56:38浏览次数:55  
标签:结构化 name 数据库 视图 连接 SQL 查询语言 id SELECT

结构化查询语言SQL

SQL语法

  • 特点
    • 非过程化 :用户不需要了解SQL的具体操作方法,通过SQL描述想要获取的结果集合的条件,结果如何取得是由数据库查询优化系统负责具体的执行
    • 简单易学
    • 易迁移
    • 高度统一
  • 划分为四种语言集
    • DDL数据定义语言:(模式)定义修改删除,create、Alter、drop Table等操作
    • DQL数据查询语言:查询数据,投影选择连接,以select命令开始
    • DML数据操作语言:(外模式)插入删除更新,insert、delete、updata
    • DCL数据控制语言:控制用户的访问权限,grant、revoke

数据类型

  • 字符串
    • char(n)n指定了定长字符串的长度。如果输入字符串长度小于n,则会在尾部用空格补齐到n个字符;如果大于n则会从右边自动截断,到仅剩n个字符为止
    • varchar(n) n为字符串的最大长度,输入的字符串不会有补齐操作,以变长的形式
  • 数值
    • smallint 整型,长度是2个字节,取值范围[-32768~32767]
    • interget 整型,长度是4个字节,取值范围[-2147483648~2147483647]
    • bigint 整型,长度是8个字节,取值范围[+-9.22*10的18次方]
    • float(p) 浮点类型,P代表的是浮点类型中小数点前后的总位数之和
    • real 单精度浮点类型,取值范围
    • numeric(p,s)p为小数点前后的总位数,s表示小数点后的位数
    • decimal(p,s)精度不受p和s的限制,p、s决定精度下限
    • double precision 双精度类型,长度为8个字节,取值范围为
  • 日期
    • date 由年月日组成,yyyy-mm-dd
    • timestamp 由年月日时分秒组成 yyyy-mm-dd hh:mm:ss
  • 常用类型
    • blob/clob 大对象 blob是二进制文件,clob是文件类型
    • boolean 布尔类型,true、false、unknown,unknow和null等价

表模式定义

  • 创建数据库
    create database db01;
  • 创建表
    create TABLE stu01( s_id INT, s_name VARCHAR(10), s_age INT, s_city VARCHAR(10) );
  • alter table修改表的基本模式
    • add column 增加列
      ALTER TABLE stu01 ADD COLUMN s_sex VARCHAR(10);
    • drop column 删除列
      ALTER TABLE stu01 DROP COLUMN s_sex ;
    • alter column 修改列
    • 删除表,有视图、触发器、外键则删除不成功
      DROP TABLE stu01;
    • 强制删除,包括关联的视图
      DROP TABLE stu01 CASCADE;

数据完整性检验

  • 域完整性
    • null约束:指定一列的值是否为null
    • check约束:用来检查输入的值是否满足某一约束条件
    • defaul约束:如果输入数据中没有指定该列具体的值,可以直接使用default约束指定的默认值
  • 实体完整性
    • 主键:值唯一,不能null
    • unique:只能有唯一的值,可以null
  • 参照完整性
    • 外键:指定的键值组合和键值相对应

插入删除更新

  • insert into
    INSERT INTO stu01 VALUES(01,'chen**',21,'chengdu',07);
  • delete from
    delete FROM stu01 WHERE(s_name='chen**');
  • update
    UPDATE stu01 SET s_name = 'cjn' WHERE s_name = 'chen**';

简单查询

  • select from where
    SELECT * FROM stu01 WHERE s_id = 1;

连接操作

  • from后跟多个表
  • 本质是多个表之间做笛卡尔积,衍生出自然连接,θ连接
    SELECT * FROM t1,t2,t3 WHERE t1.c1 = 1;
  • 对t1,t2做笛卡尔积
    SELECT * FROM t1 CROSS JOIN t2;
  • 等值内连接
    SELECT * FROM t1 INNER JOIN t2 ON t1.c1=t2.c1;
  • 自然连接
    SELECT *FROM t1 NATURAL JOIN t2;
  • 连接结果来看分为
    • 等值连接或者叫内连接 inner join:只有符合条件的连接结果
    • 外连接:外表就是左表,内表就是右表
      • 左连接 left join,左外连接:返回包括左表中的所有记录和右表中连接字段相等的记录,右表中没有对应的值返回null。
      • 右连接 right join,右外连接:返回包括右表中的所有记录和左表中连接字段相等的记录。
      • 全连接、全外连接 full join:返回左右表中所有的记录和左右表中连接字段相等的记录。
    • 半连接
      • semi join
      • anti-semi join
#创建A1表
-- CREATE TABLE A1(
-- id INT,
-- name VARCHAR(20));
-- INSERT INTO  a1 VALUES(1,'小王'),(2,'小李'),(3,'小刘');
-- #创建B2表
-- CREATE TABLE B2(
-- id int,
-- A_id int,
-- job VARCHAR(20));
-- INSERT INTO B2(id,A_id,job) VALUES(1,2,'老师'),(2,4,'程序员');
#内连接、等值连接:只保留负责条件的结果
SELECT * FROM A1;
SELECT * FROM B2;
SELECT * FROM A1 INNER JOIN B2 on A1.id=B2.A_id;
SELECT a.name,b.job FROM A1 a INNER JOIN B2 b on a.id=b.A_id;
#左连接:保留左边和右边符合条件的结果
SELECT * FROM A1 LEFT JOIN B2 ON A1.id = B2.A_id;
SELECT a.name,b.job FROM a1 a LEFT JOIN b2 b ON a.id=b.A_id;
#右连接:保留右边和左边符合条件的结果
SELECT * FROM A1 RIGHT JOIN B2 on A1.id=B2.A_id;
SELECT a.NAME,b.job from a1 a RIGHT JOIN b2 b on a.id=b.A_id;
#全外连接:保留两边的结果 FULL JOIN

集合操作

  • union:并,关键字两端的结果集并集操作
    • 两个集合合并,去重
  • except:差,从左侧的结果集中排出左侧的结果集
    • 左边-右边相同的值,左边剩下的为结果
  • intersect:交集,取两个集合中交集部分
    • 保留两遍相同的值
  • 默认隐含去重 distinct,不去重 all
SELECT * FROM T1;
SELECT * FROM T2;
SELECT * FROM T1 UNION SELECT * FROM  T2;
SELECT * FROM T1 EXCEPT SELECT * FROM  T2;
SELECT * FROM T1 INTERSECT SELECT * FROM  T2;
SELECT * FROM T1 UNION DISTINCT SELECT * FROM T2;
SELECT * FROM T1 UNION ALL SELECT * FROM T2;

聚集于分组操作

  • count([all/distinct]expression|*)
    • count(*)统计所有元组包括null值的数量,count(colname)只统计非null值的数量。
  • sum([all/distinct]expression)
    • 求和指定列
  • AVG 求平均值
  • max求最大值,min最小
SELECT * FROM t1;
SELECT count(*) FROM T1;
SELECT count(c2) FROM T1;
SELECT COUNT(DISTINCT T1.c1) FROM T1;
SELECT SUM(c1) FROM t1;
SELECT avg(c1) FROM t1;
SELECT MAX(c1) FROM t1;
  • order by 排序

SELECT column_list
FROM table_name
[WHERE condition]
[ORDER BY column1, column2, .. columnN] [ASC | DESC];

  • group by 分组
    • 基础语法 select column1,column2 from tablename GROUP BY column1/2

SELECT column1, column2
FROM table_name
WHERE [ conditions ]
GROUP BY column1, column2
ORDER BY column1, column2

索引

索引能够提高 SELECT 查询和 WHERE 子句的速度,但是却降低了包含 UPDATE 语句或 INSERT 语句的数据输入过程的速度。索引的创建与删除不会对表中的数据产生影响。

  • 基本语法
    CREATE INDEX index_name ON table_name;
  • 单列索引
    CREATE INDEX index_name ON table_name (column_name);
  • 唯一索引
    CREATE UNIQUE INDEX index_name on table_name (column_name);

视图与物化视图

数据库三种模式

  • 模式:逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。又称概念模式或逻辑模式。是对所有用户数据逻辑结构和特征的所有描述。主要由数据库设计者进行DDL语言进行描述和定义。体现了数据库的整体观。
    • 一个数据库只有一个模式;
    • 是数据库数据在逻辑级上的视图;
    • 数据库模式以某一种数据模型为基础;
    • 定义模式时不仅要定义数据的逻辑结构(如数据记录由哪些数据项构成,数据项的名字、类型、取值范围等),而且要定义与数据有关的安全性、完整性要求,定义这些数据之间的联系。
  • 外模式:也称子模式或用户模式,是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。对应于用户级,是某个或某几个用户所能看到的数据库的数据视图,是从模式导出的一个子集,故又称子模式。用户主要通过DML语言对外模式数据进行操作。外反应了数据库的用户观。
    • 一个数据库可以有多个外模式;
    • 外模式就是用户视图;
    • 外模式是保证数据安全性的一个有力措施。
  • 内模式:也称存储模式(Storage Schema),它是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式(例如,记录的存储方式是顺序存储、按照B树结构存储还是按hash方法存储;索引按照什么方式组织;数据是否压缩存储,是否加密;数据的存储记录结构有何规定)。
    • 一个数据库只有一个内模式;
    • 一个表可能由多个文件组成,如:数据文件、索引文件。它是数据库管理系统(DBMS)对数据库中数据进行有效组织和管理的方法下一题;
    • 为了减少数据冗余,实现数据共享;
    • 为了提高存取效率,改善性能。

视图

  • 视图是虚表,本身不保存数据,是一种外模式,基本表改变视图中的数据也将会改变,改变视图映射到原表。

CREATE VIEW view_name AS
SELECT column1, column2.....
FROM table_name
WHERE [condition];

物化视图

  • 本身保存数据,提高查询的访问效率
  • 对物化视图的操作直接作用到物化视图本身。
  • 基本表数据改变会同步物化视图
  • 对基本表频繁的增删查改会增加物化视图的开销,降低性能

CREATE MATERIAL VIEW view_name AS
SELECT column1, column2.....
FROM table_name
WHERE [condition];

访问控制

事务处理语言

存储过程和函数

存储过程声明

存储过程的修改

函数的声明和修改

触发器

游标

标签:结构化,name,数据库,视图,连接,SQL,查询语言,id,SELECT
From: https://www.cnblogs.com/cjnlll/p/16849623.html

相关文章

  • MySQL函数
    字符串函数 例子 数值函数 例子日期函数  流程函数 注意:空值不为NULL 案例1 案例2 总结.......
  • MySQL加固
    MySQL加固1.口令加固1.1old_passwords环境变量设置old_passwords决定了使用PASSWORD()函数和IDENTIFIEDBY、CREATEUSER、GRANT等语句时的hash算法:0-authen......
  • Centos离线安装JDK+Tomcat+MySQL8.0+Nginx
    一、安装JDK注:以下命令环境在Xshell中进行。1、查询出系统自带的OpenJDK及版本rpm-qa|grepjdk2、如果显示已安装openjdk则对其进行卸载。#卸载rpm-e--nodeps......
  • 结构化需求建模
     首先确定一个目标:模型的作用:简化问题、抽象描述问题、只管描述问题。软件模型有:领域模型、需求模型、设计模型、实现模型、测试模型软件模型的作用(1)软件模型是......
  • MySQL 知识点小结
    ------------------操作mysql的命令--------------------cmd命令行中查看mysql版本:mysql-Vmysql--version登陆mysql:mysql-uroot-pluismysql-uroot-p在mysql......
  • 软件需求与分析课堂测试09 –结构化建模分析
    阅读下列材料,完成问题:住户到一门市办理业务,若进户及更户要求,可在一门市直接办理,以更新物业管理基本信息,其他业务需求要制作管理签报,连同各种相关材料送管理处处理;管理处3......
  • mysql双主架构解决自增冲突
    Mysql双主自增长冲突处理 多主互备和主从复制有一些区别,因为多主中都可以对服务器有写权限,所以设计到自增长重复问题 出现的问题(多主自增长ID重复) 1:首先我们通过A......
  • MySQL查询数据(多表查询)
    准备工作,新建名为students的数据,三张表分别是student,courses,stu_cou,并创建外键约束,级联删除更新,插入数据。/*创建数据库*/createdatabaseifnotEXISTSstudentscha......
  • MySQL基础语句
    DDL(DataDefinitionLanguage) DML(DataManipulateLanguage) DQL(DataQueryLanguage)聚合函数聚合函数作用于字段,而且NULL值不参与计算分组查询 具体......
  • SQL注入--根据sleep判断
    找数据库名1'unionselectsleep(5),2wheredatabase()like'{数据库名称枚举}%';--union是联合查找数据库,当查询为真是sleep生效‘;--’能注释其余SQL找表名1'......