一、SQL概述

sql是结构化查询语言(Structured Query Language,SQL)是专门用来与数 据库通信的语言,它可以帮助用户操作关系数据库。

SQL的特点:

SQL不是某个特定数据库供应商专有的语言; SQL简单易学 ;SQL强大、灵活,可以进行非常复杂和高级的数据库操作

SQL的组成:

  • 数据查询
  • 数据定义语言(Data Definition Language,DDL)
  • 数据操纵(DML)
  • 数据控制(DCL)

*******************数据定义语言**********************

CREATE 创建数据库或数据库对象

ALTER 对数据库或数据库对象进行修改

DROP 删除数据库或数据库对象

************数据操纵语言(Data Manipulation Language,DML)***********

SELECT 从表或视图中检索数据

INSERT 将数据插入到表或视图中

UPDATE 修改表或视图中的数据

DELETE 从表或视图中删除数据

***************数据控制语言(Data Control Language,DCL)****************

GRANT 用于授予权限

REVOKE 用于收回权限

二、MySQL预备知识

嵌入式和动态SQL规则:规定了SQL语句在高级语言程序设计中 使用的规范方法,以便适应较为复杂的应用

SQL 调 用(以便提高SQL的灵活性、有效性、共享性以及使SQL具有更多的高级语言的特征):SQL 例 程、调 用 规 则

MySQL使用基础:LAMP模式 、WAMP模式   L(Linux) A(Apache)M(MySQL) P(PHP、Perl、Python)

关系数据库管理系统(RDBMS):优点:体积小、速度快、开放源代码、遵循GPL

MySQL扩展语言要素

常量:也称字面值或标量值 

  • 字符串常量:用单引号或双引号括起来的字符序列,分为ASCII字符串常量和Unicode字符串常量
  • 数值常量:整数常量、  浮点数常量
  • 十六进制常量:每对十六进制数字被转换为一个字符,其最前面有一个字母“X”(或“x”)
  • 时间日期常量:用单引号将表示日期时间的字符串括起来而构成的 例如:’2018-06-05’
  • 位字段值
  • 布尔值:TRUE:1  ;FALSE: 0
  • NULL值

变量:

  • 用户变量:用户变量前常添加一个符号@,用于将 其与列名区分开
  • 系统变量:大多数系统变量应用于其他SQL语句中 时,必须在系统变量前添加两个@

 表达式 表达式是常量、变量、列名、复杂计算、运算符和函数的组合。

  • 字符型表达式
  • 数值型表达式
  • 日期型表达式

三、数据定义(DDL)

创建数据库(CREATE):使用CREATE  DATABASE 或  CREATE SCHEMA语句

CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name[DEFAULT]CHARACTER SET[=]charset_name|[DEFAULT]COLLATE[=]collation_name

例句:create DATABASE test_sy CHARACTER SET ="UTF8" COLLATION ="utf8_general_ci";     CREATE DATABASE mysql_test;

  1. 字符集(character set):定义了字符以及字符的编码。
  2. 字符序(collation):指定字符集的 校对规则。

查看数据库(SHOW):查看数据库的所有表

SHOW {DATABASES | SCHEMAS}[LIKE’pattern’ | WHERE expr]

Like关键字用于匹配指定的数据库名称; Where从句用于指定数据库名称查询范围的条件

例句:SHOW DATABASES;  SHOW DATABASES LIKE "%test%";

SHOW TABLES:查看数据库非系统表

选择数据库(USE):USE db_name;  从一个数据库“跳转”到另一个数据库。

修改数据库:alert

mysql>ALTER DATABASE mysql_test-> DEFAULT CHARACTER SET gb2312-> DEFAULT COLLATE gb2312_chinese_ci;

删除数据库:

DROP{DATABASE|SCHEMA}[IF EXISTS]db_name

例句:DROP DATABASE hahaha;   DROP DATABASE IF EXISTS hahaha;

*****************************表定义**********************************

创建表:数据表是关系数据库中最重要、最基本的数据对象, 也是数据存储的基本单位。

数据表, 被定义为字段的集合 按(行 )和(列 )的格式来存储的, 每一( 行)代表一条记录, 每一(列 )代表记录中一个字段的取值。

CREATE[TEMPORARY]TABLE tbl_name(字段名1 数据类型 [列级完整性约束条件][默认值][,字段名2 数据类型 [列级完整性约束条件][默认值]][,……][,表级完整性约束条件])[ENGINT=引擎类型];

若添加“TEMPORARY”,则为临时表

在一个已有数据库mysql_test中新建一个包含客户姓名、性别、地址、 联系方式等内容的客户基本信息表,要求将客户的id号指定为该表的 主键。

PRIMARY KEY(cust_id):指定主键

数据类型:

  • 整型int
  • 浮点型double
  • 布尔型bool
  • 日期型date
  • 时间戳timestamp
  • 时间型time 定长
  • 字符类型char
  • 可变长字符varchar

更新表(ALTER):使用ALTER TABLE语句,增加或删减列、创建或取消索引、更改原有列的 数据类型、重新命名列或表,更改表的评注和表的引擎类型,为表重新创 建触发器、存储过程、索引和外键等。

1、ADD COLUMN 

例如:向数据库mysql_test的表customers中添加一列,并命名为 cust_city,要求其不能为NULL,默认值为字符串“Wuhan”,且该列位 于原表cust_sex列之后。

ALTER TABLE mysql_test.customers ->ADD COLUMN cust_city char(10)NOT NULL DEFAULT ‘Wuhan’ AFTER cust_sex;

2、CHANGE[COLUMN]子句 修改表中列的名称或数据类型

 3、ALTER[COLUMN]子句 修改或删除表中指定列的默认值

  ALTER TABLE mysql_test.customers ->ALTER COLUMN cust_city SET DEFAULT ‘Beijing’;

4、MODIFY[COLUMN]子句 只修改指定列的数据类型,不会干涉它的列名

  ALTER TABLE mysql_test.customers ->MODIFY COLUMN cust_name char(20) FIRST;

5、DROP[COLUMN]子句 删除表中多余的列

ALTER TABLE mysql_test.customers ->DROP COLUMN cust_contact;

6、RENAME[TO]子句 为表重新赋予一个表名

ALTER TABLE mysql_test.customers ->RENAME TO mysql_test.backup_customers;

给表重命名表的第二种写法:RENAME TABLE db_a.old_table TO db_b.new_table;

7、DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [ ,tbl_name ] … [RESTRICT | CASCADE]

查看表结构:

SHOW [FULL] COLUMNS {FROM | IN} tbl_name[{FROM | IN} db_name] [LIKE’pattern’ | WHERE expr]

例如:SHOW COLUMNS FROM t_role;

{DESCRIBE | DESC} tbl_name [col_name | wild]

例如:DESC t_role;

********************************************索引****************************************

 索引:索引是提高数据文件访问效率的有效方法

 索引存在的弊端: 1)索引是以文件的形式存储的,如果有大量的索引,索引文件可能比数据 文件更快达到最大的文件尺寸; 2)索引在提高查询速度的同时,会降低更新表的速度。

 索引的分类:索引通常被创建成单列索引和组合索引

  • 普通索引 INDEX或KEY
  • 唯一性索引 UNIQUE
  • 主键 PRIMARY KEY

索引的创建 Create index

例如:在数据库mysql_test的表customers上,根据客户姓名列的前三个 字符创建一个升序索引index_customers。

create index  index_customers  on mysql_test.customers (name(3) ASC);

在数据库mysql_test的表customers上,根据客户姓名列和客户id 号创建一个组合索引index_cust。

create index index_cust on mysql_test.customers (cust_name,cust_id);

2、语法项[CONSTRAINT[symbol]] UNIQUE [INDEX|KEY] [index_name] (index_col_name,…),
用于表示在创建新表的同时创建该表的唯一性索引;
3、语法项[CONSTRAINT[symbol]] FOREIGN KEY [index_name] (index_col_name,…),
用于表示在创建新表的同时创建该表的外键;

索引的创建:使用ALTER TABLE语句创建

  • 1)语法项ADD {INDEX|KEY} [index_name](index_col_name,…), 用于表示在修改表的同时为该表添加索引;
  • 2)语法项ADD [CONSTRAINT [symbol]] PRIMARY KEY (index_col_name,…), 用于表示在创建新表的同时为该表添加主键;
  • 3)语法项ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] (index_col_name,…), 用于表示在修改表的同时为该表添加唯一性索引;
  • 4)语法项ADD [CONSTRAINT [symbol]] FOREIGN KEY (index_col_name,…), 用于表示在创建新表的同时为该表添加外键

例如:使用ALTER TABLE语句在数据库mysql_test中表seller的姓名上添加一列 非唯一的索引,取名为index_seller_name。

ALTER TABLE mysql_test.seller   ADD INDEX index_seller_name(seller_name);

 索引的查看(SHOW INDEX )

SHOW {INDEX | INDEXES | KEYS} {FROM | IN} tbl_name [{FROM | IN} db_name ] [WHERE expr]

SHOW index FROM t_test.tb_dept;

索引的删除:使用DROP INDEX语句

DROP INDEX index_name ON tbl_name;

索引的删除:使用ALTER TABLE语句

  • 1)选用DROP PRIMARY KEY子句用于删除表中的主键,由于一个表中只有 一个主键,其也是一个索引;
  • 2)选用DROP INDEX子句用于删除各种类型的索引;
  • 3)选用DROP FOREIGN KEY子句用于删除外键。

例如:使用ALTER TABLE语句删除数据库mysql_test中表customers的主键和索引 index_customers。

四、数据更新(数据操纵语言DML)

插入数据 

  • INSERT…VALUES语句
  • INSERT…SET语句
  • INSERT…SELECT语句

例如:

1、使用INSERT…VALUES语句向数据库mysql_test的表customers中 插入这样一行完整数据:(901,张三 ,F,北京市,朝阳区)

  INSERT INTO mysql_test.customers    VALUES (901,’张三’,’F’,’北京市’,’朝阳区’);

2、使用INSERT…VALUES语句向数据库mysql_test的表customers中插入这样一行 数据,要求该数据目前只用明确给出cust_name列和cust_address列的信息,即分别为 ‘李四’‘武汉’,而cust_id由系统自动生成,cust_sex列选用表中默认值,另外 cust_contact列的值暂不确定,可不用指定

INSERT INTO mysql_test.customers   VALUES (0,’李四’,DEFAULT,’武汉市’,NULL);

********************使用INSERT…SET语句插入部分列值数据***************************

语法:INSERT [INTO] tbl_name SET col_name={expr | DEFAULT},…

例如:使用INSERT…SET语句向数据库mysql_test的表customers中插入 数据:名为李四 ,地址为武汉,性别默认

insert into mysql_test.customers set cu_name="李四",cu_address="武汉",cu_sex=DEFAULT;

***********************使用INSERT…SELECT语句插入子查询数据****************************

语法:INSERT [INTO] tbl_name [(col_name,…)] SELECT…

例句:INSERT INTO db1_name (field1,field2) SELECT field1,field2 FROM db2_name;

删除数据

语法:DELETE FROM tbl_name [WHERE where_condition ] [ORDER BY … ] [LIMIT row_count ]

例如:使用DELETE语句删除数据库mysql_test的表customers中客户名 为“李四”的客户信息。

delete from mysql_test.customers where cu_name="李四";

修改数据

语法:UPDATE tbl_name SET col_name1={expr1|DEFAULT}[,col_name2={expr2|DEFAULT}]… [WHERE where_condition] [ORDER BY …] [LIMIT row_count]

例如:使用UPDATE语句将数据库mysql_test的表customers中姓名为“ 张三”的客户的地址更新为“武汉”

UPDATE mssql_test.customers   SET cust_address=‘武汉市’   WHERE cust_name=‘张三’;

五、数据查询

 SELECT语句

例如:查询数据库mysql_sest的表customers中各个客户的姓名、性别和地址信息

SELECT cust_name,cust_sex,cust_address   FROM mysql_test.customers;

定义并使用列的别名:SELECT cust_name,cust_address AS 地址,cust_contact    FROM mysql_test.customers;

替换查询结果集中的数据

SELECT
CASE id
WHEN 1 then "yf"
when 2 then "cs"
WHEN 3 THEN "yw"
WHEN 4 THEN "jl"
ELSE "qt" END AS NAME
FROM tb_dept;

聚合函数通常是数据库系统中一类系统(内置函数)

*******************FROM子句与多表连接查询**********************

交叉连接,又称笛卡尔积

  • SELECT * FROM tbl1 CROSS JOIN tbl2;
  • SELECT * FROM tbl1,tbl2

内连接:SELECT   *  FROM tb_student INNER JOIN tb_score   ON tb_student.studentNo=tb_score.studentNo

  • 关于内连接的使用,可以将一个表与它本身进行连接,这种连接方式称为自连接;
  • 关于内连接的使用,如若在ON子句的连接条件中使用运算符“=”,则此 连接方式为(等值连接)

外连接:

  • 左外连接:在FROM子句中使用关键字LEFT OUTER JOIN或LEFT JOIN
  • 右外连接:在FROM子句中使用关键字RIGHT OUTER JOIN或RIGHT JOIN

问答题:写出在MySQL中,内连接的语法格式。

简述左外连接和右外连接的区别。

  • 左外连接:也称左连接。以左表为基表,在FROM子句中使用关键字“LEFT OUTER JOIN”或关键字“LEFT JOIN”来连接两张表。
  • 右外连接:也称右连接。以右表为基表,在FROM子句中使用关键字“RIGHT OUTER JOIN”或关键字“RIGHT JOIN”来连接两张表。

where子句

判定范围:

1、当查询的过滤条件被限定在值的某个范围时,可以使用关键字“BETWEEN”。

例如:SELECT * FROM mysql_test.customers ->WHERE cust_id BETWEEN 903 AND 912;

2、使用关键字“IN”可以指定一个值的枚举表,该表中会列出所有可能的值

判定空值: is  null ;is not null

子查询—结合关键字“IN”使用的子查询:主要用于判定一个给定值是否存在于子查询的结果集中

子查询—结合关键字“EXISTS”使用的子查询:子查询的结果集不为空,则返回TRUE,否则返回FALSE

GROUP BY子句与分组数据:

HAVING子句:HAVING where_condition(指定过滤条件)

having 语句与实际有出入为了考试请按照书本上的来哪怕他错了

 ORDER BY子句:排序

例句:在数据库mysql_test的表customers中依次按照客户姓名和地址的降序方式输出客户的姓名和性别

SELECT cust_name,cust_sex FROM mysql_test.customers -> ORDER BY cust_name DESC,cust_address DESC;

 LIMIT:使用LIMIT子句限制被SELECT语句返回的行数

六、视图

什么是视图:

  • 视图是数据库中的一个对象,它是数据库管理系统提供给用户的以多种角度观察数据库中数据的一种重要机制。
  • 视图不是数据库中真实的表,而是一张虚拟表,其自身并不存储数据。

使用视图的优点

  • 集中分散数据
  • 简化查询语句
  • 重用SQL语句
  • 保护数据安全
  • 共享所需数据
  • 更改数据格式

使用CREATE VIEW创建视图

语法;CREATE VIEW view_name[(column_list)]  AS select_statement  [WITH [CASCADED | LOCAL] CHECK OPTION]

  • create or replace view的意思就是若数据库中已经存在这个名字的视图的话,就替代它,若没有则创建视图;
  • create则不进行判断,若数据库中已经存在的话,则报错,说对象已存在;

在数据库mysql_test中创建视图customers_view,要求该视图包含客户信息表customers中所有男客户的信息,并且要求保证今后对该视图数据的修改都必须符合客户性别为男性这个条件

CREATE OR REPLACE VIEW mysql_test.customers_view   AS  SELECT*FROM mysql_test.customers  WHERE cust_sex=‘M’  WITH CHECK OPTION;

使用DROP VIEW语句删除视图:

DROP VIEW [IF EXISTS] view_name [,view_name]… [RESTRICT | CASCADE]

使用ALTER VIEW语句对已有视图的定义(结构)进行修改

ALTER VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL]CHECK OPTION]

使用SHOW CREATE VIEW语句查看已有视图的定义(结构)

SHOW CREATE VIEW view_name

使用DELETE语句通过视图删除基本表的数据:

示例:删除视图customers_view中姓名为“周明”的客户信息

DELETE FROM mysql_test.customers_view -> WHERE cust_name=‘周明’

在视图customers_view中查找客户id号为905的客户姓名及其地址

转载于:https://www.cnblogs.com/jalja/p/11605648.html

数据库系统原理(第四章:SQL与关系数据库基本操作 )相关推荐

  1. 数据库系统原理——第四章 SQL与数据库的基本操作(1)知识点总结(自考本)

    当你想挣一百块的时候你就要把目标定成一千块,这样才挣得更多. 第四章 SQL与数据库的基本操作 SQL概述 什么是SQL? SQL的特点 SQL的四大功能 数据定义语言 数据操纵语言 数据控制语言 嵌 ...

  2. 【学习笔记】数据库系统原理 第三章 SQL语言

    以下内容为参考课件和<数据库系统概论>(第5版,王珊等著)的个人整理,若有错误欢迎指出 第三章 SQL语言 文章目录 第三章 SQL语言 一.概述 二.数据查询功能 1.查询语句 2.连接 ...

  3. 微型计算机原理答案第四章,微机原理第四章习题答案.doc

    微机原理第四章习题答案 1.8086语言指令的寻址方式有哪几类?用哪一种寻址方式的指令执行速度最快? 答:数据操作数的寻址方式有七种,分别为:立即寻址,寄存器寻址,直接寻址,寄存器间接寻址,寄存器相对 ...

  4. 第二十四章 SQL函数 CEILING

    文章目录 第二十四章 SQL函数 CEILING 大纲 参数 描述 示例 第二十四章 SQL函数 CEILING 数值函数,返回大于或等于给定数值表达式的最小整数. 大纲 CEILING(numeri ...

  5. 第九十四章 SQL函数 %MINUS

    文章目录 第九十四章 SQL函数 %MINUS 大纲 参数 描述 示例 第九十四章 SQL函数 %MINUS 将数字转换为规范整理格式,然后反转符号的整理函数. 大纲 %MINUS(expressio ...

  6. 第十四章 SQL命令 CREATE TABLE(一)

    文章目录 第十四章 SQL命令 CREATE TABLE(一) 大纲 参数 描述 语法概述 SQL安全和权限 表名 表存在 第十四章 SQL命令 CREATE TABLE(一) 创建表 大纲 CREA ...

  7. oracle延时盲注如何防止,【原创】WEB安全第四章SQL注入篇21 oracle 延时注入

    WEB安全第四章SQL注入篇21 oracle 延时注入 1.简介 DBMS_LOCK.SLEEP()函数可以让一个过程休眠很多秒,但使用该函数存在许多限制.首先,不能直接将该函数注入子查询中,因为O ...

  8. 编译原理第四章练习题

    目录 编译原理第四章作业 课本习题 补充习题 编译原理第四章作业 自己写的不包对,有错请指正 BY hllinyu 2023年3月31日 课本习题 编译原理 第三版 王生原- 清华大学出版社 的那本 ...

  9. 数据库系统原理--第2章作业1--习题答案

    说明:数据库系统原理相关的习题答案都在"数据库系统原理"专栏 1.已知三个域:男人={李基,张鹏},女人={王方,刘玉 },子女={李键,张睿,张峰}.这一组域(男人,女人,子女) ...

  10. 第六十四章 SQL函数 INSTR

    文章目录 第六十四章 SQL函数 INSTR 大纲 参数 描述 INSTR, CHARINDEX, POSITION和$FIND 示例 第六十四章 SQL函数 INSTR 返回子字符串在字符串中的位置 ...

最新文章

  1. 更改innodb_page_size状态值
  2. “MIDI机器狗”的木马正在疯狂传播
  3. oracle如何查询系统变量数据,Oracle如何对IN子查询使用绑定变量(转)
  4. Intel Realsense D435 如何通过摄像头序列号获取指定摄像头的帧集对?
  5. 【(Python解释器、Pycharm)安装教程】【使用PyCharm编写第一个Python程序】
  6. 2017计算机基础教学大纲,2017级大学计算机基础教学大纲设计.doc
  7. linux 再多的running也挡不住锁
  8. [ExtJS5学习笔记]第三十五条 sencha extjs 5 组件查询方法
  9. 网络编程和反射的基本知识点的总结
  10. semi-consistent简介
  11. Python鼠标拖动曲线(matplotlib)
  12. MSM8953 Android9.0 配置USB2.0 Camera
  13. 【2019-06-27】现在不杂
  14. Sampler 半小时快速搭建PostgreSQL简易监控
  15. DIV+CSS布局-PxCook工具的简单使用
  16. 【windows7 bluescreen蓝屏的解决方法】
  17. 【日常分享】RAM和ROM区别
  18. 域名解析不生效,中科三方带你定位!
  19. Hazelcast IMDG参考中文版手册-第十一章-分布式查询
  20. 如何优化PNG,JPG图片减小图片文件大小

热门文章

  1. 数据结构-队列之顺序队列
  2. android人脸识别技术浅析
  3. 卡尔曼滤波(Calman Filter)基本原理
  4. 变压器 5g_T5:文本到文本传输变压器
  5. 单光子探测技术应用_我如何最终在光学/光子学应用程序中使用机器学习作为博士学位
  6. 软件架构:模块、组件、微服务总结
  7. 全志A33-编译uboot
  8. 空间谱专题02:波束形成(Beamforming)
  9. 逾期之后还能贷款吗?
  10. python亲和度_数据挖掘——亲和性分析