SQL数据库教案

2024-08-30 22:44
文章标签 sql 数据库 database 教案

本文主要是介绍SQL数据库教案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录:

一:前言

1.SQL定义

2.语法规范

3.表的概念

二:语法执行顺序*

三:基础语法

1.数据库操作

2.表操作

2.1 create创建表 

2.2 drop删除表

3.增

3.1 add添加新字段 

3.2 insert插入数据 

4.删

4.1 alter删除字段

4.2 delete删除数据

5.改

5.1 alter修改字段

5.2 update更新数据

6.查select

6.1 简单查询

6.2 条件查询where

6.3 排序查询order by

6.4 分组查询group by having

6.5 多表查询

6.6 子查询

6.7 关联查询 

6.7.1 内关联

6.7.2 外关联

6.8 联合查询union


一:前言

1.SQL定义

SQL是什么a.SQL 指结构化查询语言,全称是 Structured Query Languageb.用于数据库操作 和 数据管理:存取数据以及查询、更新和管理关系数据库系统c.SQL是一种用于管理和操作关系数据库的标准语言包括数据查询、数据插入、数据更新、数据删除、数据库结构创建和修改等功能特点a.SQL本身不实现具体的数据库系统,而是作为一种语言被嵌入到各种数据库系统中b.采用客户端-服务器架构时,SQL语句在服务器端执行功能与用途a.主要用于数据查询(SELECT)、数据定义(DDL如CREATE、ALTER、DROP)、数据操纵(DML如INSERT、UPDATE、DELETE)和数据控制(DCL如GRANT、REVOKE)b.SQL的功能是标准化的,不同数据库系统间的SQL语法虽然略有差异,但基本保持一致

2.语法规范

1.SQL 对大小写不敏感:SELECT 与 select 是相同的2.每条SQL语句的末端使用分号“;”也可以不加,但是建议加上分号3.多个列 和 多个值 之间使用逗号“,”隔开4.注释-- 这是一个单行注释#这是一个单行注释5.占位符:"?"6.字符型相关的必须加引号:单引号 双引号都可以

3.表的概念

记录(横向的)行:记录/元组/具体的某个事物    字段(纵向的)列标题:字段/事物属性 值:交叉的小格子/每一个方格数据    
域:值的限定范围主键外键 主键(主关键字):可以定位到某一条具体的数据、非空、不能重复方便和其他的表进行关联:因为不会重复、可以定位到一条具体的数据外键(外部关键字):在另外一张表中与”主键“相互产生关联

二:语法执行顺序*

SQL执行顺序:select...from...where...group by...order by...limit...——>1.获取表,没有表啥也做不了from——>on——>join——>2.获取结果——>where——>group by——>having——>select——>3.结果处理——>distinct——>order by——>limit4.其他distinct:去重as取别名:在from之前搭配使用like模糊查询:在where之后搭配使用聚合函数:在from之前搭配使用;括号里面填写对象;where不能使用聚合函数   count(*)函数:用于返回查询结果的总数据条数 avg()函数:平均值sum()函数:求和max()函数:最大值min()函数:最小值group_concat()函数:指定的字段进行合并/字符串连接and和or结合运算符:在where之后搭配使用between:在某个范围内all所有的any任意的参考结构:select      查询目标from        表名称join        加入on          连接条件where       筛选记录的条件group  by   分组-分组字段,把选定的记录分成特定的组having      分组条件-筛选分组的条件,说明每个组需要满足的条件select      查询distinct    去重order  by   排序字段名limit  m,n  限制查询结果集输出的行数,m从那开始,n获取几条数据语法select [distinct|top n]  *    |    字段1 as 别名1,字段2 as 别名2.字段n as 别名n  from 表名1,表名2... [where 条件] [group by 字段] [having 条件][order by 字段... [asc默升|desc降]][limit n[,m]]

三:基础语法

数据库中数据的组织结构:数据库(database)、数据表(table)、数据行(row)、字段(field)

1.数据库操作

创建数据库:create databases 数据库名称 [charset utf8];查看所有数据库:show databases;
查看当前使用的数据库:select database();
显示部分数据库:show databases like '匹配模式'
显示数据库创建语句:show create database 数据库名字;使用数据库:use 数据库名称;删除数据库:drop datebase 数据库名称;查看有那些表:show tables;退出命令行环境:exit;

2.表操作

2.1 create创建表 

创建表createCREATE TABLE 表名(列1 数据类型1 [约末1],列2 数据类型2[约束2]…列n 数据类型n [约束n]);--------------------------------------------------------------------------------数据类型:INTEGER 长整型(integer)、NUMBER双精度型(number)、VARCHAR短文本型(varchar)、DATE日期/时间型(date)约束:主键约束(PrimaryKey)、唯一约束(Unique)、空值约束(Not Null)创建学生表:CREATE TABLE 学生(学号 INTEGER Primary Key,姓名 VARCHAR(4) Not Nul,性别 VARCHAR(1),出生日期 DATE,家庭住址 VARCHAR(30),学分 NUMBER);

2.2 drop删除表

删除表dropDROP TABLE 表名;--------------------------------------------------------------------------------DROP TABLE 学生;

3.增

3.1 add添加新字段 

添加新字段alter addALTER TABLE 表名 ADD 新列名 数据类型 [约束];--------------------------------------------------------------------------------ALTER TABLE 学生 ADD 手机号 VARCHAR(11) Unique;

3.2 insert插入数据 

插入数据insert valuesINSERT INTO 表名(字段1,字段2..字段n) VALUES(值1,值2...值n);--------------------------------------------------------------------------------INSERT INTO 学生 VALUES(2,"李四"“女",#2019-9-1#,"上海市",99.5);INSERT INTO 学生(学号,姓名,性别,出生日期,家庭住址,学分) VALUES(1,"张三""男,#2020-1-1#,“北京市",98);注意:文本用双引号包裹、日期用#包裹

4.删

4.1 alter删除字段

删除字段alter dropALTER TABLE 表名 DROP 新列名;--------------------------------------------------------------------------------ALTER TABLE 学生 DROP 家庭住址;

4.2 delete删除数据

删除数据delete whereDELETE FROM 表名 [WHERE 条件];DELETE FROM 表名 limit 限制的行数量;--------------------------------------------------------------------------------DELETE FROM 学生 WHERE 姓名="张三";

5.改

5.1 alter修改字段

修改字段alter alterALTER TABLE 表名 ALTER 新列名 数据类型;--------------------------------------------------------------------------------ALTER TABLE 学生 ALTER 姓名 VARCHAR(10):

5.2 update更新数据

更新数据update set whereUPDATE 表名 SET 字段1=值1, 字段2 = 值2.... [WHERE 条件];--------------------------------------------------------------------------------UPDATE 学生 SET 学分=学分+1 WHERE 姓名="张三";

6.查select

语法select [distinct|top n]  *    |    字段1 as 别名1,字段2 as 别名2.字段n as 别名n  from 表名1,表名2... [where 条件] [group by 字段] [having 条件][order by 字段... [asc默升|desc降]][limit n[,m]]说明distinct去重    top n前几       as取别名group by分组    having条件-拥有 order  by排序   asc正序         desc倒序avg平均数       count统计求和    max最大        min最小    all所有的    any任意的一个union联合       and和or         count(*)计数   like模糊查询

6.1 简单查询

    select * from 表名称;select 列名称 from 表名称;--------------------------------------------------------------------------------SELECT*FROM 员工:SELECT 姓名,性别,手机号,工资 AS 薪资 FROM 员工;                       as取别名SELECT DISTINCT 性别 FROM 员工;                                     distinct截然不同的

6.2 条件查询where

    SELECT 姓名,性别,手机号,工资,部门 FROM 员工 WHERE 部门="咨询部";SELECT 姓名,性别,手机号,工资,部门 FROM 员工 WHERE 工资>5000 AND 工资<20000;SELECT 姓名,性别,手机号,工资,部门 FROM 员工 WHERE 工资 Between 5000 AND 20000;SELECT 姓名,性别,手机号,工资,部门 FROM 员工 WHERE 部门 IN("咨询部""销售部");SELECT 姓名,性别,手机号,工资,部门 FROM 员工 WHERE 姓名 LIKE"王*";

6.3 排序查询order by

    SELECT TOP 3 姓名,性别,手机号,工资,部门 FROM 员工 WHERE 部门="咨询部" ORDER BY 工资 DESC;SELECT 姓名,工资 FROM 员工 ORDER BY 工资 DESC:

6.4 分组查询group by having

    SELECT 部门,COUNT(员工编号) AS 人数 FROM 员工 GROUP BY 部门:SELECT 部门,AVG(工资) AS 平均工资 FROM 员工 GROUP BY 部门 HAVING AVG(工资)>15000;

6.5 多表查询

    select 列名称 from 表1 as 别名1,表2 as 别名2,...表n[where 连接条件进行关联比对筛选]--------------------------------------------------------------------------------SELECT 客户.姓名,咨询信息.咨询事务,咨询信息.咨询方式 FROM 客户,咨询信息 WHERE 客户.客户编号=咨询信息.客户编号;SELECT 客户.姓名,员工.姓名,咨询信息.咨询事务,咨询信息.咨询方式 FROM 客户,咨询信息,员工 WHERE 客户.客户编号 = 咨询信息.客户编号 AND 咨询信息.员工编号=员工.员工编号;

6.6 子查询

    SELECT 姓名,工资 FROM 员工 WHERE 工资>(SELECT AVG(工资) FROM 员工);SELECT 姓名,工资 FROM 员工 WHERE 部门=“产品部" AND (工资 > ALL(SELECT 工资 FROM 员工 Where 部门=“销售部"));SELECT 姓名,工资 FROM 员工 WHERE 部门 ="产品部"AND (工资 > ANY(SELECT 工资 FROM 员工 Where 部门=“销售部”));

6.7 关联查询 

6.7.1 内关联

内关联(交集 双向奔赴 可能都没有不能相互关联) 

    select 列名称 from 表1 as 别名1 [inner]  join 表2 as 别名2on 别名1.连接字段 = 别名2.连接字段;--------------------------------------------------------------------------------
6.7.2 外关联

外关联(单向奔赴 以什么为主)

    select 列名称 from 表1 as 别名1 (left|right) [outer] join 表2 as 别名2on 别名1.连接字段 = 别名2.连接字段;--------------------------------------------------------------------------------

解释 

左连接(LEFT JOIN/LEFT OUTER JOIN)左连接用于从“左表”中获取所有行,并尝试与“右表”中的行进行匹配如果右表中存在与左表连接条件相匹配的行,则这些行会一起出现在结果中如果右表中没有匹配的行,则结果中右表的部分将包含NULL这通常用于确保结果中包含左表中的所有记录,即使它们在右表中没有对应的匹配项右连接(RIGHT JOIN/RIGHT OUTER JOIN)右连接与左连接相反,它从“右表”中获取所有行,并尝试与“左表”中的行进行匹配如果左表中存在与右表连接条件相匹配的行,则这些行会一起出现在结果中如果左表中没有匹配的行,则结果中左表的部分将包含NULL然而,由于可以通过交换表的顺序和使用左连接来达到相同的效果,右连接在实际应用中相对较少见外连接(OUTER JOIN)外连接是一个更广泛的概念,它包括了左外连接和右外连接然而,在SQL查询中,你通常会明确指定是LEFT OUTER JOIN还是RIGHT OUTER JOIN,因为单独的OUTER JOIN可能在不同的数据库系统中具有不同的解释或不被直接支持外连接的主要目的是确保结果中包含至少一个表中的所有行,即使它们在另一个表中没有对应的匹配项。这些未匹配的行在结果中将以NULL填充另一个表的部分

6.8 联合查询union

union 联合查询:合并两个表中的数据,生成新表

    select 姓名,性别,手机号 from 员工 union select 姓名,性别,手机号 from 客户;--------------------------------------------------------------------------------

这篇关于SQL数据库教案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1122148

相关文章

MySQL中删除重复数据SQL的三种写法

《MySQL中删除重复数据SQL的三种写法》:本文主要介绍MySQL中删除重复数据SQL的三种写法,文中通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下... 目录方法一:使用 left join + 子查询删除重复数据(推荐)方法二:创建临时表(需分多步执行,逻辑清晰,但会

详谈redis跟数据库的数据同步问题

《详谈redis跟数据库的数据同步问题》文章讨论了在Redis和数据库数据一致性问题上的解决方案,主要比较了先更新Redis缓存再更新数据库和先更新数据库再更新Redis缓存两种方案,文章指出,删除R... 目录一、Redis 数据库数据一致性的解决方案1.1、更新Redis缓存、删除Redis缓存的区别二

oracle数据库索引失效的问题及解决

《oracle数据库索引失效的问题及解决》本文总结了在Oracle数据库中索引失效的一些常见场景,包括使用isnull、isnotnull、!=、、、函数处理、like前置%查询以及范围索引和等值索引... 目录oracle数据库索引失效问题场景环境索引失效情况及验证结论一结论二结论三结论四结论五总结ora

Mysql 中的多表连接和连接类型详解

《Mysql中的多表连接和连接类型详解》这篇文章详细介绍了MySQL中的多表连接及其各种类型,包括内连接、左连接、右连接、全外连接、自连接和交叉连接,通过这些连接方式,可以将分散在不同表中的相关数据... 目录什么是多表连接?1. 内连接(INNER JOIN)2. 左连接(LEFT JOIN 或 LEFT

C#实现文件读写到SQLite数据库

《C#实现文件读写到SQLite数据库》这篇文章主要为大家详细介绍了使用C#将文件读写到SQLite数据库的几种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录1. 使用 BLOB 存储文件2. 存储文件路径3. 分块存储文件《文件读写到SQLite数据库China编程的方法》博客中,介绍了文

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

mysql重置root密码的完整步骤(适用于5.7和8.0)

《mysql重置root密码的完整步骤(适用于5.7和8.0)》:本文主要介绍mysql重置root密码的完整步骤,文中描述了如何停止MySQL服务、以管理员身份打开命令行、替换配置文件路径、修改... 目录第一步:先停止mysql服务,一定要停止!方式一:通过命令行关闭mysql服务方式二:通过服务项关闭

SQL Server数据库磁盘满了的解决办法

《SQLServer数据库磁盘满了的解决办法》系统再正常运行,我还在操作中,突然发现接口报错,后续所有接口都报错了,一查日志发现说是数据库磁盘满了,所以本文记录了SQLServer数据库磁盘满了的解... 目录问题解决方法删除数据库日志设置数据库日志大小问题今http://www.chinasem.cn天发

mysql主从及遇到的问题解决

《mysql主从及遇到的问题解决》本文详细介绍了如何使用Docker配置MySQL主从复制,首先创建了两个文件夹并分别配置了`my.cnf`文件,通过执行脚本启动容器并配置好主从关系,文中还提到了一些... 目录mysql主从及遇到问题解决遇到的问题说明总结mysql主从及遇到问题解决1.基于mysql

MySQL的索引失效的原因实例及解决方案

《MySQL的索引失效的原因实例及解决方案》这篇文章主要讨论了MySQL索引失效的常见原因及其解决方案,它涵盖了数据类型不匹配、隐式转换、函数或表达式、范围查询、LIKE查询、OR条件、全表扫描、索引... 目录1. 数据类型不匹配2. 隐式转换3. 函数或表达式4. 范围查询之后的列5. like 查询6