数据库详细讲解--上

目录

 MYSQL

数据库三层结构

数据在数据库中的存储方式

SQL 语句分类

创建数据库

查看、删除数据库

备份恢复数据库

备份恢复数据库的表

创建表

Mysql 常用数据类型(列类型)

数值型(整数)的基本使用

如何定义一个无符号的整数

数值型(bit)的使用

数值型(小数)的基本使用

字符串的基本使用

字符串使用细节

日期类型的基本使用

​编辑 修改表

数据库 C[create]R[read]U[update]D[delete]

SQL语言:DDL、DML、DQL、DCL详解

DDL数据定义语言全称是Data Definition Language

DML数据操纵语言全称是Data Manipulation Language,

DQL数据查询语言全称是Data Query Language,

DCL数据控制语言全称:Data Control Language。

MySQL

合计/统计函数

count

sum

avg

max/min

使用 group by 子句对列进行分组

使用 having 子句对分组后的结果进行过滤

字符串相关函数

数学相关函数

时间日期相关函数

加密和系统函数

流程控制函数

mysql 表查询--加强

mysql 表子查询

union all

union


 MYSQL

数据库三层结构

  1. 所谓安装Mysql数据库,就是在主机安装一个数据库管理系统(DBMS),这个管理程序可以管理多个数据库。DBMS(database manage system)
  2. 一个数据库中可以创建多个表,以保存数据(信息)。
  3. 数据库管理系统(DBMS)、数据库和表的关系如图所示:示意图

数据在数据库中的存储方式

SQL 语句分类

  • DDL:数据定义语句[create表,库…]
  • DML:数据操作语句[增加insert,修改update,删除delete]DQL:数据查询语句[select]
  • DCL:数据控制语句[管理数据库:比如用户权限grant revoke]

创建数据库

  1. CHARACTER SET:指定数据库采用的字符集,如果不指定字符集,默认utf8utf8 general ci[不区分大小写]注意默认是utf8_general_ci)
  2. COLLATE:指定数据库字符集的校对规则(常用的utf8_bin[区分大小写]

查看、删除数据库

备份恢复数据库

备份恢复数据库的表

创建表

Mysql 常用数据类型(列类型)

数值型(整数)的基本使用

使用范围:在能够满足需求的情况下,尽量选择空间小的

如何定义一个无符号的整数

create table t10(id tinyint);//默认是有符号的

create table t11 (id tinyint unsigned);无符号的

数值型(bit)的使用

1.基本使用

mysql>create table t05(id int,num bit(8)); 

mysql>insert into t05 (1,3); 

mysql>insert into t05 values(2,65);

2.细节说明

bit字段显示时,按照位的方式显示.

查询的时候仍然可以用使用添加的数值如果一个值只有0,1可以考虑使用bit(1),可以节约空间位类型。

M指定位数,默认值1,范围1-64使用不多.

数值型(小数)的基本使用

字符串的基本使用

字符串使用细节

细节1

char(4)//这个4表示字符数(最大255),不是字节数,不管是中文还是字母都是放四个,按字符计算.

varchar(4)//这个4表示字符数,不管是字母还是中文都以定义好的表的编码来存放数据

不管是中文还是英文字母,都是最多存放4个,是按照字符来存放的.

细节2

char(4)是定长(固定的大小),就是说,即使你插入’aa’也会占用分配的4个字符的空间.

varchar(4)是变长(变化的大小),就是说,如果你插入了'aa’,实际占用空间大小并不是4个字符,而是按照实际占用空间来分配

(说明:varchar本身还需要占用1-3个字节来记录存放内容长度) L(实际数据大小)+(1-3)字节

细节3

什么时候使用char,什么时候使用varchar

1.如果数据是定长,推荐使用char,比如md5的密码,邮编,手机号,身份证号码等. char(32)

2.如果一个字段的长度是不确定,我们使用varchar,比如留言,文章查询速度char>varchar

细节4

日期类型的基本使用

 
修改表

数据库 C[create]R[read]U[update]D[delete]

Insert 语句

 细节说明

  1. 插入的数据应与字段的数据类型相同。
  2. 数据的长度应在列的规定范围内,例如:不能将一个长度为 80 的字符串加入
  3. 在 values 中列出的数据位置必须与被加入的列的排列位置相对应
  4. 字符和日期型数据应包含在单引号中。
  5. 列可以插入空值[前提是该字段允许为空],insert into table value(null)
  6. insert into tab_name (列名..) values (),(),() 形式添加多条记录
  7. 如果是给表中的所有字段添加数据,可以不写前面的字段名称
  8. 默认值的使用,当不给某个字段值时,如果有默认值就会添加默认值,否则报错

update 语句

使用细节:

1. UPDATE语法可以用新值更新原有表行中的各列。

2. SET子句指示要修改哪些列和要给予哪些值。

3. WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行(记录),因此提醒一定小心。

4.如果需要修改多个字段,可以通过set字段1=值1,字段2=值2....

delete 语句

使用细节

  1. 如果不使用where子句,将删除表中所有数据。
  2. Delete语句不能删除某一列的值(可使用update设为null或者")
  3. 使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。drop table 表名;

select 语句

注意事项

  1. Select指定查询哪些列的数据。
  2. column指定列名。
  3. *号代表查询所有列。
  4. From指定查询哪张表。
  5. DISTINCT可选,指显示结果时,是否去掉重复数据

使用表达式对查询的列进行运算

在 select 语句中可使用 as 语句

在 where 子句中经常使用的运算符

使用 order by 子句排序查询结果

SQL语言:DDL、DML、DQL、DCL详解

DDL数据定义语言全称是Data Definition Language

定义语言就是定义关系模式、删除关系、修改关系模式以及创建数据库中的各种对象,

比如表、聚簇、索引、视图、函数、存储过程和触发器等等。

数据定义语言是由SQL语言集中负责数据结构定义与数据库对象定义的语言,

并且由CREATE、ALTER、DROP和TRUNCATE(截断)四个语法组成

DML数据操纵语言全称是Data Manipulation Language,

主要是进行插入元组、删除元组、修改元组的操作。

主要有insert、update、delete语法组成。

DQL数据查询语言全称是Data Query Language,

所以是用来进行数据库中数据的查询的,即最常用的select语句

DCL数据控制语言全称:Data Control Language。

用来授权或回收访问数据库的某种特权,

并控制数据库操纵事务发生的时间及效果,能够对数据库进行监视。

比如常见的授权、取消授权、回滚、提交等等操作

MySQL

合计/统计函数

count

-- count(*) 和 count(列) 的区别 -- 解释 :coun

t(*) 返回满足条件的记录的

-- count(列): 统计满足条件的某列有多少个,但是会排除 为 null 的情况

sum

avg

max/min

使用 group by 子句对列进行分组

使用 having 子句对分组后的结果进行过滤

字符串相关函数

TRIM(string) -- 去除前端空格和后端空格

数学相关函数

时间日期相关函数

上面函数的细节说明

  1. DATE ADD()中的 interval后面可以是 year minute second day 等
  2. DATE SUB()中的 interval 后面可以是 year minute second hour day 等
  3. DATEDIFF(date1,date2)得到的是天数,而且是date1-date2的天数,因此可以取负数
  4. 这四个函数的日期类型可以是date,datetime或者 timestamp

加密和系统函数

流程控制函数

mysql 表查询--加强

如何使用 like 操作符(模糊) -- %: 表示 0 到多个任意字符 _: 表示单个任意

--? 如何显示首字符为 S 的员工姓名和工资

SELECT ename, sal FROM emp

WHERE ename LIKE 'S%'

--? 如何显示第三个字符为大写 O 的所有员工的姓名和工资

SELECT ename, sal FROM emp

WHERE ename LIKE '__O%

 -- 如何显示没有上级的雇员的情况

SELECT * FROM emp

WHERE mgr IS NULL;

-- 查询表结构

DESC emp

-- 使用 order by 子句

-- ?如何按照工资的从低到高的顺序[升序],显示雇员的信息

SELECT * FROM emp

ORDER BY sal

 --? 按照部门号升序而雇员的工资降序排列 , 显示雇员信息

SELECT * FROM emp

ORDER BY deptno ASC sal DES

分页查询

基本语法: select .. limit start, rows

表示从start+1行开始取,取出rows行,start从0开始计算

数据分组的总结

如果select语句同时包含有group by ,having,limit  order by 

那么他们的顺序是group by, having, orderby, limit

mysql 多表查询

多表查询的条件不能小于 表的个数-1 否则就会出现笛卡尔积

自连接

自连接的特点

  1. 把同一张表当做两张表使用
  2. 需要给表取别名 表名 表别名
  3. 列名不明确,可以指定列的别名 列名 as 列的别

mysql 表子查询

  1. 子查询是指嵌入在其它 sql 语句中的 select 语句,也叫嵌套查询
  2. 单行子查询是指只返回一行数据的子查询语句

多行子查询

  1. 多行子查询指返回多行数据的子查询in 使用关键字
  2. 子查询当做临时表使用
  3. 在多行子查询中使用 all 操作符    所有的都要满足
  4. 在多行子查询中使用 any 操作符  任意一个满足

多列子查询

多列子查序则是指查询返回多个列数据的子查询语句

在 from 子句中使用子查询

SELECT ename, sal, temp.max_sal, emp.deptno

FROM emp, (SELECT deptno, MAX (sal) AS mescal

FROM emp GROUP BY deptno ) temp

WHERE emp. deptno = temp. deptno AND emp.sal = temp.max

还有一种写法 表.* 表示将该表所有列都显示出来, 可以简化 sql 语句 -- 在多表查询中,当多个表的列不重复时,才可以直接写列名

SELECT tmp. *, dname, loc

FROM dept, (   

SELECT COUNT (*) AS per_num, deptno FROM emp GROUP BY deptno

 ) tmp

WHERE tmp. deptno = dept. deptno

表复制

自我复制数据(蠕虫复制)

有时,为了对某个sql语句进行效率测试,我们需要海量数据时,可以使用此法为表创建海量数据。

- 演示如何自我复制

1. 先把 emp 表的记录复制到 my_tab01

INSERT INTO my_tab01

(Id, `name`, sal, job, deptno)

SELECT empno, ename, sal, job, deptno FROM emp;

-- 2. 自我复制

INSERT INTO my_tab01

SELECT * FROM my_tab01;

SELECT COUNT(*) FROM my_tab01;

合并查询

union all

该操作符用于取得两个结果集的并集。当使用该操作符时,不会取消重复行。

select ename,sal,job

from emp where sal>2500

union all

select ename,sal,job

from emp where job='MANAGER';

union

该操作赋与union all相似,但是会自动去掉结果集中重复行

select ename, sal,job

from emp where   sal>2500

union

select ename, sal, job

from emp where  job='manager';

本章笔记是观看韩顺平的JAVA的视频和在网上找的资料 以及自己的理解总结出来的笔记希望可以帮助大家,感谢大家的耐心观看 如有错误请即使联系我 我会及时修正

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
DuckDB是一款嵌入式数据库,主要用于嵌入其他程序执行快速的SQL分析查询。它被称为“分析型数据库SQLite”,因为它易于安装和使用,没有外部依赖,并提供了C/C++、Python和R的语言绑定。下面是DuckDB的详细讲解: 1. DuckDB的特点 - 嵌入式数据库:DuckDB是一个嵌入式数据库,可以轻松地嵌入到其他应用程序。 - 零依赖:DuckDB没有外部依赖,因此安装和使用非常简单。 - 高性能:DuckDB在处理大型数据集时表现出色,特别是在分析查询方面。 - 支持SQL:DuckDB支持SQL,包括复杂的查询和聚合操作。 - 支持多种编程语言:DuckDB提供了C/C++、Python和R的语言绑定,因此可以轻松地在这些语言使用它。 2. DuckDB的安装 DuckDB可以通过多种方式进行安装,包括Python和R的包管理器,以及源码安装。下面是Python和R安装DuckDB的方法: - Python安装DuckDB: ```shell pip install duckdb ``` - R安装DuckDB: ```shell install.packages("duckdb") ``` 3. DuckDB的使用 DuckDB的使用非常简单,可以通过SQL查询来操作数据。下面是一个使用Python进行DuckDB查询的例子: ```python import duckdb # 创建连接 con = duckdb.connect(database=':memory:', read_only=False) # 创建表 con.execute("CREATE TABLE users (id INTEGER PRIMARY KEY, name VARCHAR(100), age INTEGER)") # 插入数据 con.execute("INSERT INTO users VALUES (1, 'Alice', 25)") con.execute("INSERT INTO users VALUES (2, 'Bob', 30)") con.execute("INSERT INTO users VALUES (3, 'Charlie', 35)") # 查询数据 result = con.execute("SELECT * FROM users WHERE age > 30") print(result.fetchall()) # 关闭连接 con.close() ``` 上面的代码创建了一个名为“users”的表,并向其插入了一些数据。然后,它执行了一个查询,以查找年龄大于30岁的用户,并打印了结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尘觉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值