目录

SQL 语句

truncate 语句 不属于DML语句

1>作用 截断名

2>语法: truncate table 表名

3>和 delete 语句的区别

对于自增长字段,使用 truncate语句表截断后,值恢复初始值

truncate 语句不能回滚

select 语句

select语句概述

select 字段列表  from 数据源 [ where 条件表达式] [group by 分组字段] [ having 条件表达式]

[order by 排序字段 {[asc] |desc}]

使用select 子句指定字段列表

命名别名

字段或 表达式 [ as ] 别名

select version() as 版本号 ,now( ) 服务器当前时间;

基本查询语句

特殊的关键字

distinct 去掉重复的行

select distinct 字段列表 from 表名;

使用 limit 限制显示行数

分页查询

select 字段列表 from 表名  limit [ start , ] length;

多表查询

多表查询的类型

内连接 : 符合关联条件的数据行被检索出来,不符合关联条件的被过滤掉

外连接: 外连接的结果集 = 内连接的结果集 + 匹配不上的数据行

内连接

select 字符安列表 from 表1 [ inner ] join 表2 on 关联条件;

表 的别名

表名  [as]  别名

给 表一旦命名别名,在该语句中 就只能 使用别名 ,原表名就失效了

三表内连接

select 字段列表

from 表1 [ inner ] join 表2 on 关联条件1 [ inner ] join 表3 on 关联条件2;

外连接

左外连接 :

左外连接结果集 = 内连接的结果集 + 左表中匹配不上的数据

select 字段列表

from 左表 left [ outer ] join 右表 on 关联条件;

右外连接 :

右外连接结果集 = 内连接的结果集 + 右表中匹配不上的数据

select 字段列表

from 左表 right [ outer ] join 右表 on 关联条件;

如果想在结果集中显示两张表的所有内容

全外连接--- MySQL 不支持语法

全外连接结果集 = 内连接的结果集 + 两表中匹配不上的数据

select 字段列表

from 左表 full [ outer ] join 右表 on 关联条件;

MySQL 支持语法 union 语句 union all 语句

作用:

区别:

union

union all


SQL 语句

truncate 截断

truncate 语句 不属于DML语句

1>作用 截断名

2>语法: truncate table 表名

3>和 delete 语句的区别

  • truncate 语句不能用于主表(即使从表中没有数据
  • truncate table student;#//从表 choose中没有数据
  • delete table student; #// 正确

对于自增长字段,使用 truncate语句表截断后,值恢复初始值

insert into exam values(null,90); stu_no 8truncate table exam;insert into exam values(null,90); stu_no 1

truncate 语句不能回滚

select 语句

select语句概述

语法

select 字段列表 from 数据源 [ where 条件表达式] [group by 分组字段] [ having 条件表达式] [order by 排序字段 {[asc] |desc}]

其中

  • 字段列表: 制定检索字段
  • 数据源: 检索的表或视图
  • where 子句: 制定数据行的过滤条件
  • group by 子句: 根据分组字段 ,把数据行分成了若干个组,并进行汇总统计
  • having 子句: 对分组后的数据进行筛选
  • order by 子句: 对结果集进行排序,默认的是升序

使用select 子句指定字段列表

字段列表的指定方式

  • * : 代表数据源中的全部字段
  • 字段列表 : 用逗号隔开的字段列表,制定需要检索的若干个字段
  • 表名.* : 在多表查询时,指定某个表中的全部字段
  • 表名.字段 : 在多表查询时,制定某个表中的某个字段
  • 表达式 : 表达式中 可以包含算术运算,函数等

实例

检索MySQL 的版本号 .服务器时间

select version(),now();

命名别名

字段或 表达式 [ as ] 别名

select version() as 版本号 ,now() 服务器当前时间;

基本查询语句

语法:

select 字段列表 from 表名;

实例:

列出表中的所有字段

SELECT * FROM student;

列出表中的部分字段

select student_no,student_name,student_contact from student;

字段去命名别名

select student_no as 学号,student_name 姓名,student_contact 联系方式 from student;

使用表达式

select stu_no 学号,score 卷面成绩,score*0.7+30 综合成绩 from exam;

特殊的关键字

distinct 去掉重复的行

语法:

select distinct 字段列表 from 表名;

示例:

select class_no from student;

单列排序

select distinct class_no from student;

多列排序

use information schema;show tables; --显示当前数据库中所有表的名字
desc tables; -- 查看表tables的表结构
select table schema 数据库名,table name 表名,table type 表类型from infomation schea table;
select distinct table schema数据库名from information schema . tables;
select distinct table_ type from information schema. tables;
select distinct table_ schema 数据库名,table_ type 表的类型
information schema . tables;

使用 limit 限制显示行数

分页查询

语法:

select 字段列表 from 表名  limit [ start , ] length;

其中

start : 表示从第几行开始检索,缺省时为0, 表示为第一行

length : 表示要检索多少行

示例

列出 information_schema.tables 表中的前10行 显示 table_schema,table_name;

select table_schema 数据库名,table_name 表名 from information_schema.tables limit 10;

练习: 每页显示 10行,列出 tables表中的第7页

select table_schema 数据库名,table_name 表名 from information_schema.tables limit 60,10;

多表查询

需求: 列出学生及其所在班级的信息,包括学号,姓名和班级名称

学号,姓名: student

班级名称: classes

关联字段: student.class_no,classes.class_no,

关联条件: student.class_no=classes.class_no,

多表查询的类型

内连接 : 符合关联条件的数据行被检索出来,不符合关联条件的被过滤掉

外连接: 外连接的结果集 = 内连接的结果集 + 匹配不上的数据行

内连接

语法

select 字符安列表 from 表1 [ inner ] join 表2 on 关联条件;

需求: 列出学生及其所在班级的信息,包括学号,姓名和班级名称

学号,姓名: student

班级名称: classes

关联字段: student.class_no,classes.class_no,

关联条件: student.class_no=classes.class_no;

select student.student_no,student.student_name,classes.class_no from student join classes on student.class_no=classes.class_no;

向学生表中插入一行数据 没有班级

insert into student values('2018006','小明','20000000',null);

班级表中也插入一行数据

insert into classes(null,'2018机械自动化2班','机电工程');

内连接匹配不上数据不会显示

select student.student_no 学号,student.student_name 姓名,classes.class_no 班级名称 from student join classes on student.class_no=classes.class_no;

表 的别名

表名  [as]  别名

select s.student_no 学号,s.student_name 姓名,c.class_no 班级名称from student s join classes c on s.class_no=c.class_no;

错误演示

表一旦命名别名,在该语句中 就只能 使用别名 ,原表名就失效了

select student.student_no 学号,s.student_name 姓名,c.class_no 班级名称 from student s join classes c on s.class_no=c.class_no;

如果连接的多张表中,没有重名的字段,可以省略 字段前的表名别名的修饰 缺点 会 降低SQL 语句的查询效率

select student no 学号,student name 姓名,class name 班级 from student s join classes c on s.class_no=c.class_no;

三表内连接

向选课表choose 中 插入测试数据

student_no course_no score( ) choose_time

SQL 语句如下

insert into choose values( ... );

语法

select 字段列表

from 表1 [ inner ] join 表2 on 关联条件1 [ inner ] join 表3 on 关联条件2;

示例;

select  s.student_on 学号,s.student_name 姓名, cs.course_name 课程 ,ch.score 成绩
​    from student s join choose ch on s.student_no = ch.student_on join course cs on cs.course_on = ch.course_on;

练习:

列出教师及其所授课程的信息,包括教师的工号,姓名,课程名称,上限人数

select t.teacher_on 教师工号,t.teacher_name 姓名,c.course_name 课程,c.up_limit 人数from teacher t join course c on t.teacher_on=c.teacher_on;

教师的工号,姓名,课程名称,和选修该课程的学生的学号

select t.teacher_on 教师工号,t.teacher_name 姓名,c.course_name 课程,c.up_limit 人数from teacher t join course c on t.teacher_on=c.teacher_on join choose ch on c.course_on = ch.coure_on;

外连接

左外连接 :

左外连接结果集 = 内连接的结果集 + 左表中匹配不上的数据

语法

select 字段列表

from 左表 left [ outer ] join 右表 on 关联条件;

示例:

列出所有学生及其所在班级信息

select s.student_on 学号,s.student_name 姓名,c.calss_name 班级from student s left join classes c on s.class_on = c.class_on;  

右外连接 :

右外连接结果集 = 内连接的结果集 + 右表中匹配不上的数据

语法:

select 字段列表

from 左表 right [ outer ] join 右表 on 关联条件;

示例:

列出所有学生及其所在班级信息

select s.student_on 学号,s.student_name 姓名,c.calss_name 班级from classes c right join student s on s.class_on = c.class_on;  

如果想在结果集中显示两张表的所有内容

全外连接--- MySQL 不支持语法

全外连接结果集 = 内连接的结果集 + 两表中匹配不上的数据

语法 :

select 字段列表

from 左表 full [ outer ] join 右表 on 关联条件;

MySQL 支持语法 union 语句 union all 语句

作用:

将两个select的结果作为一个整体显示出来。

满足条件: 1、两个select查询的列的数量必须相同;

2、每个列的数据类型需要相似;

区别:

union all是将两个select语句的结果求并集。 union是将union all的结果下再去除重复数据

union

使用 union 实现以上功能

select s.student_on 学号,s.student_name 姓名,c.calss_name 班级from student s left join classes c on s.class_on = c.class_on
union
select s.student_on 学号,s.student_name 姓名,c.calss_name 班级from student s right join classes c on s.class_on = c.class_on; 
 

如果union 连接的两张表的字段列表 数量不一致,可以给字段列表少的表赋值 null, 不赋值会报错

select * from student union select *,null from teacher;

union all

select s.student_on 学号,s.student_name 姓名,c.calss_name 班级from student s left join classes c on s.class_on = c.class_on
union all
select s.student_on 学号,s.student_name 姓名,c.calss_name 班级from student s right join classes c on s.class_on = c.class_on;
  

Java菜鸟补给站---MySQL数据库 SQL 语句补充( 一 )相关推荐

  1. MySql数据库SQL语句小结

    数据库概述 什么是数据库? 什么是关系型数据库? 数据库相关概念 什么是SQL语言? 连接mysql服务器 数据库及表操作 创建.删除.查看数据库 创建.删除.查看表 新增.更新.删除表记录 查询表记 ...

  2. MySQL数据库 sql语句的简单入门学习

    初步学习MySQL后的一些总结 MySQL简介 MySQL在过去由于性能高.成本低.可靠性好,已经成为最流行的开源数据库,因此被广泛地应用在Internet上的中小型网站中.随着MySQL的不断成熟, ...

  3. MySQL数据库---SQL语句优化及性能优化

    文章目录 mysql的架构图 mysql的执行过程 sql语句执行计划 索引失效的情况 mysql性能调优: 分库分表 读写分离---主从复制 mysql的架构图 大致分为4层:连接层.服务层.引擎层 ...

  4. mysql数据库sql语句大全

    mysql sql语句大全 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql se ...

  5. Strust2 Mysql数据库,sql语句分页,JSP显示

    1. 常见分页实现方式 (1) Java程序分页的实现主要是用List 接口中的subList(int startIndex,int endIndex)方法,这种方式也称为程序内存分页. (2) 使用 ...

  6. Mysql数据库Sql语句执行效率-Explain

    为什么80%的码农都做不了架构师?>>>    Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看SQL语 ...

  7. Mysql 数据库 -------- SQL语句进阶查询 ------- 后部分

    Mysql ---- SQL高级查询 连接查询 内连接 外连接 数据库函数 数学函数 聚合函数(给数据表用的) 字符串函数(字符串用''格式) 日期时间函数 存储过程 创建存储过程 创建存储过程中的传 ...

  8. mySQL数据库Sql语句执行效率检查--Explain命令

    Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看SQL语句的执行效 果,可以帮助选择更好的索引和优化查询语句,写出更好的优 ...

  9. MySQL 数据库--SQL 语句(一)

    一.准备 1.源码编译安装 MySQL 必须先准备好软件包至/opt目录下 软件包资源传送门:百度网盘 请输入提取码 提取码:u4vw #!/bin/bashsystemctl stop firewa ...

最新文章

  1. VoIP应用系统大盘点
  2. Oracle关于TX锁的一个有趣的问题
  3. vim 怎么显示空格_vim 修改tab为四个空格
  4. php文本数据库 搜索,一个文本数据库的搜索方法_php
  5. SQL:ISNULL
  6. magento如何如何找到对应html文件_Servlet如何配置xml
  7. moosefs即将发布新版
  8. 定义带参数的C宏,方便输出调试信息
  9. steam社区、好友列表无法打开问题通解
  10. android对话框列表,android列表对话框(dialog)的实现
  11. 7本最经典的逻辑思维书籍推荐
  12. [学习报告]《LeetCode零基础指南》(第五讲) 指针-gyro
  13. 周易正易 p1-100
  14. (改进GM(1,1)模型)灰色残差马尔科夫预测模型的matlab实现
  15. python网络编程初级总结(1)
  16. ps教程-双重曝光效果实现
  17. 一枚程序媛的java人生—2018年年终总结
  18. 小游戏:俄罗斯方块(Qt 5.9.8)
  19. java-php-python-ssm文学阅读平台计算机毕业设计
  20. 洛谷P1498 南蛮图腾

热门文章

  1. Ubuntu登陆浙大校园无线网
  2. 精品基于Python实现的医院挂号系统医生
  3. 搞钱!如何拿下奖金534万的全国人工智能大赛?
  4. Linux:访问权限与粘滞位之详解
  5. burpsuite模块详解
  6. Linux ubuntu18.04.4下如何利用CPU利用率画出50%直线、正弦曲线、心形曲线
  7. 【Python可视化】matplotlib画动态曲线
  8. RadioButtonList控件
  9. 转---工作两年后感悟的《大话西游》
  10. 解决samtools: error while loading shared libraries: libcrypto.so.1.0.0: cannot open shared object file