数据库-Mysql使用学习笔记(命令行及图形化界面)(3)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 数据库-Mysql使用学习笔记(命令行及图形化界面)(3)

连接查询

为防止数据冗余,会将有关系的数据放在不同的表中,表之间有关系,这也是关系型数据库的由来。

内连接

等值连接

连接条件是等量关系

查询每个员工的员工名和所在部门名

select e.ename,d.dname from emp e,dept d where e.deptno = d.deptno;

2020062310470442.png以上为92年的SQL语法,现在多使用92年的SQL语法,使用join on进行表连接

select e.ename,d.dname from emp e join dept d on e.deptno = d.deptno;

请读者自行尝试。

非等值连接

连接条件是非等值关系

查找每个员工的工资等级,显示员工名,薪资,薪资等级

select e.ename,e.sal,s.grade from emp e join salgrade s on  e.sal between s.losal and hisal;

2020062310470442.png

自连接

自己连自己

查询员工的上级领导,显示员工名、领导名(不必查出所有员工)

select e.ename,m.ename from emp e join emp m on e.mgr = m.empno;

2020062310470442.png

注:join前省略了inner,读者可自行尝试

外连接

分为主表和副表,主要主表中的数据全部查询出来,当副表中的数据和主表的数据匹配不上,副表自动模拟出NULL与之匹配。

join前加left或right

左(外)连接

左表为主表

查询员工的上级领导,显示员工名、领导名(查出所有员工,没有领导时显示NULL)

select e.ename,m.ename from emp e left join emp m on e.mgr = m.empno;

2020062310470442.png

注意,KING是大BOSS,没有领导,所以是NULL,另外,left和join之间省略了outer,读者可自行尝试。

右(外)连接

右表为主表

找出哪个部门没有员工

select d.* from emp e right join dept d on e.deptno = d.deptno where empno is null;

使用右连接,部门必全部查出来,如果没有员工,则员工号为NULL

2020062310470442.png

当然,条条大路通罗马,也可以使用子查询。

select * from dept where deptno not in (select deptno from emp group by deptno);

多表连接

看成多次两表连接即可。

查询每个员工的员工名,部门名,工资等级

select e.ename,d.dname,s.grade from emp e join dept d on e.deptno = d.deptno join salgrade s on e.sal between s.losal and hisal;

2020062310470442.png

子查询

where子句中

查询高于平均薪资的员工信息

select * from emp where sal > (select avg(sal) from emp);

2020062310470442.png

可以看到,结果都是大于平均薪资的员工

from子句中

查询每个部门平均薪资所属的薪资等级

select t.*,s.grade from (select deptno,avg(sal) avgsal from emp group by deptno) t join salgrade s where t.avgsal between s.losal and s.hisal;

2020062310470442.png

将上面的查询结果,当做临时表t,临时表t与salgrade表进行连接,连接条件是平均工资在最低和最高工资之间。

Select子句中

查询每个员工所在部门的名称,显示员工名和部门名

使用表连接的话可以这样写:

select e.ename,d.dname from emp e join dept d on e.deptno = d.deptno;

也可不进行表连接,写到select子句中

select e.ename,(select d.dname from dept d where e.deptno = d.deptno) from emp e; 

2020062310470442.png

Union查询

这个在SQL注入中是一种注入技巧

两个查询结果必须列数相同

查询工作岗位是SALESMAN和MANAGER的员工

select ename,job from emp where job = 'MANAGER' union select ename,job from emp where job = 'SALESMAN';

2020062310470442.png

Limit(分页查询)

Mysql独有的,用于取结果的部分数据,sqlserver、Oracle中不能使用,Oracle中有rownum差不多。

limit [startIndex] length

  • startIndex :起始位置,从0开始,默认为0
  • length:个数

查询工资前5名的员工名和工资

select ename,sal from emp order by sal desc limit 0,5;

2020062310470442.png

select ename,sal from emp order by sal desc limit 5; 

每页显示pageSize条记录,pageNo从1开始,则

第pageNo页:?,pageSize  ==> ? 为 (PageNo - 1)*pageSize,pageSize

例如,pageSize = 3,pageNo = 1, limit 0,3

DDL

Create

创建表

语法

CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
....
)

常见字段类型

int:整型

bigint:长整型

float:浮点型

char:定长字符串

varchar:可变长字符串

date:日期类型

BLOB:(Binary Large Object,二进制大对象),存储 图片/视频 等流媒体信息

CLOB:(Character Large Object,字符大对象),

建立学生表t_student,学号 no,bigint类型,姓名 name,varchar类型,性别 sex char类型,班号 classno,varchar类型,生日 birth char类型

create table t_student(
    no bigint,
    name varchar(255),
    sex char(1),
    classno varchar(255),
    birth char(10)
);

2020062310470442.png

从其他表获取

 create table table_name as select 语句;

创建emp1表, 仅包含emp表的ename和sal字段。

 create table emp1 as select ename,sal from emp;

2020062310470442.png

Drop

语法

drop table [if exists] table_name;

2020062310470442.png

ALTER

使用图形化界面即可,例如Navicat 表右键->设计表,一般创建时很谨慎,设计好再创建,很少修改表结构。

2020062310470442.png

DML

INSERT

语法

INSERT INTO table_name VALUES (值1, 值2,....),(值1, 值2,....),

我们也可以指定所要插入数据的列,这样,其他列就是默认值:

INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....),(值1, 值2,....)
insert into t_student values(1,'zhangsan','1','gaosan1ban','1996-11-20');

2020062310470442.png

一次多行插入

insert into t_student values(2,'lisi','0','gaosan1ban','1996-10-20'),(3,'wangwu','1','gaosan1ban','1994-01-12'); 

2020062310470442.png

从其他表插入

列,类型之类的要一样,很少用,提一下,不截图了。

insert into table_name  select 语句;

创建dept1表与dept表数据一致,在dept1表后再插入一次dept表的所有内容

create table dept1 as select * from dept;
insert into dept1 select * from dept;

2020062310470442.png

UPDATE

语法

update table_name set 字段名1=值1,字段名2=值2,... [where 语句];

注意,没有条件,整张表全部更新。

dept1表中部门编号为10的LOC字段改为BEIJING

update dept1 set loc = 'BEIJING ' where deptno = 10;

2020062310470442.png

DELETE

语法

delete from table_name [where 子句];

没有条件全部删除

删除部门20的所有数据

delete from dept1 where deptno = 20;

2020062310470442.png

大表删除数据

对于亿级及以上的大表,删除快,但无法回滚

语法

truncate table table_name;

删除表dept1

truncate table dept1;

2020062310470442.png

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
3月前
|
人工智能 运维 关系型数据库
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
665 1
|
26天前
|
存储 关系型数据库 MySQL
使用命令行cmd查询MySQL表结构信息技巧分享。
掌握了这些命令和技巧,您就能快速并有效地从命令行中查询MySQL表的结构信息,进而支持数据库维护、架构审查和优化等工作。
157 9
|
3月前
|
SQL 关系型数据库 MySQL
Go语言数据库编程:使用 `database/sql` 与 MySQL/PostgreSQL
Go语言通过`database/sql`标准库提供统一数据库操作接口,支持MySQL、PostgreSQL等多种数据库。本文介绍了驱动安装、连接数据库、基本增删改查操作、预处理语句、事务处理及错误管理等内容,涵盖实际开发中常用的技巧与注意事项,适合快速掌握Go语言数据库编程基础。
255 62
|
2月前
|
SQL 存储 关系型数据库
MySQL功能模块探秘:数据库世界的奇妙之旅
]带你轻松愉快地探索MySQL 8.4.5的核心功能模块,从SQL引擎到存储引擎,从复制机制到插件系统,让你在欢声笑语中掌握数据库的精髓!
|
2月前
|
SQL Oracle 关系型数据库
比较MySQL和Oracle数据库系统,特别是在进行分页查询的方法上的不同
两者的性能差异将取决于数据量大小、索引优化、查询设计以及具体版本的数据库服务器。考虑硬件资源、数据库设计和具体需求对于实现优化的分页查询至关重要。开发者和数据库管理员需要根据自身使用的具体数据库系统版本和环境,选择最合适的分页机制,并进行必要的性能调优来满足应用需求。
105 11
|
1月前
|
SQL 关系型数据库 MySQL
MySQL数据库命令行操作_mysql命令行
下面帮你整理一份MySQL数据库命令行操作的常用命令总结,适合日常开发和管理时快速使用。
|
2月前
|
SQL 关系型数据库 MySQL
【赵渝强老师】MySQL中的数据库对象
本教程详细介绍了MySQL数据库中的常见对象,包括表、索引、视图、事件、存储过程和存储函数的创建与管理。内容涵盖表的基本操作、索引的使用、视图简化查询、事件调度功能等,并通过具体示例演示相关SQL语句的使用方法。
|
4月前
|
关系型数据库 MySQL 定位技术
MySQL与Clickhouse数据库:探讨日期和时间的加法运算。
这一次的冒险就到这儿,期待你的再次加入,我们一起在数据库的世界中找寻下一个宝藏。
195 9
|
4月前
|
存储 关系型数据库 MySQL
【赵渝强老师】OceanBase数据库从零开始:MySQL模式
《OceanBase数据库从零开始:MySQL模式》是一门包含11章的课程,涵盖OceanBase分布式数据库的核心内容。从体系架构、安装部署到租户管理、用户安全,再到数据库对象操作、事务与锁机制,以及应用程序开发、备份恢复、数据迁移等方面进行详细讲解。此外,还涉及连接路由管理和监控诊断等高级主题,帮助学员全面掌握OceanBase数据库的使用与管理。
263 5
|
4月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!

热门文章

最新文章

推荐镜像

更多