小白学习Java第二十九天
今日内容
- 数据库的导入和导出
- DQL
基本查询
条件查询
排序查询
函数
分组查询
分页查询
连接查询
一. 导入导出数据库
1.导出数据库
选中要导出的数据库,鼠标右键备份/导出——>备份数据库,转储到SQL...
选择导出文件存储路径并导出
- 导入数据库
选择服务器鼠标右键执行SQL脚本
选择之前导出的sql文件并执行
二. DQL
1、基本查询
语法:select 查询列表 from 表名;
1)查询全部列 *通配符表示所有列
2)筛选部分列
3)查询起别名 as
2、条件查询
语法:select 查询列表 from 表名 where 条件;
- 单条件查询
- 多条件查询,使用and or not
- 空值查询is null / is not null
- 范围查询in/between...and
- 模糊查询like
3、排序查询
语法:
select 查询列表
from 表名
[where 条件]
order by 排序列表 asc|desc;
注意:默认是升序排列,ASC关键字可以省略不写,如果需要降序排列,DESC关键字必须要写,针对多列排序时,每个列的后面都需要指定排序方式,如不指定均采用默认的升序排列。
- 升序排列:ASC 默认值
- 降序排列:DESC
3)多列排序:分主排序列和次排序列,先按主进行排序,如果存在重复数据,再按次排序。
- 常见函数
- 字符串函数
length(str) 获取字符串长度,UTF8下1个汉字3个字节,gbk下1个汉字2个字节
lower(str) 转小写
upper(str) 转大写
substr(str,index,len) 截取字符串
lpad(str,n,a) 左填充
rpad(str,n,a) 右填充
trim(str) 去除两侧空格
concat(str1,str2,....) 字符串拼接
-- length字节为单位 UTF8编码汉字3个字节 字母与数字是1个字节 SELECT LENGTH('abc'); SELECT LENGTH('中国'); -- lower转小写 SELECT LOWER('abcABC'); -- upper转大写 SELECT UPPER('ABCabc'); -- 截取字符串 参数1:待截取的原始字符串,参数2:起始下标从1开始,参数3:截取长度 SELECT SUBSTR('hello',2,3) /* lpad(str,n,a)左填充:str:原始字符串,n:总长度,a:填充字符 作用:如果字符串str的长度不够n时,用a填充其左面直到长度为n */ SELECT LPAD('中国人',9,'#'); -- rpad()右填充 SELECT RPAD('中国人',9,'#'); -- trim()去除两侧空格 SELECT TRIM(' abc '); -- concat()字符串拼接 SELECT CONCAT('how','are','you'); |
- 日期函数
now() 获取系统当前时间
year(date)/month(date)/day(date) 年 月 日
date_format(date,’%y%m%d%h%i%s’) 指定的日期格式
curdate() 当前日期
curtime() 当前时间
current_timestamp 当前时间 年月日
-- now()获取系统当前时间 SELECT NOW(); -- year()/month()/day() 年 月 日 SELECT YEAR(NOW()); SELECT MONTH(NOW()); SELECT DAY(NOW()); -- date_format() 指定的日期格式 SELECT DATE_FORMAT(NOW(),'%Y%m%d%H%i%s'); -- curdate()当前日期 SELECT CURDATE(); -- curtime()当前时间 SELECT CURTIME(); --current_timestamp SELECT CURRENT_TIMESTAMP; |
- 聚合函数:多与分组查询一起使用
max() 最大值
min() 最小值
sum() 求和
count() 计数
avg() 平均值
SELECT MAX(age) FROM stu; SELECT MIN(age) FROM stu; SELECT AVG(age) FROM stu; SELECT COUNT(*) FROM stu; SELECT SUM(age) FROM stu; |
5、分组查询
定义:通过group by 对原始表中的数据先进行分组再进行数据汇总(聚合函数)的一种查询。
分组查询的小技巧:
1)一般在题意描述中都会出现一个“每”字
2)分组查询中select关键字后面的列是有限制的,能出现在select后面的列只有两种情况:一是被分组的列,二是包含在聚合函数中的列。
语法:
select 分组字段和分组函数
from 表名
[where 条件]
[group by 分组字段]
[having 分组后筛选]
[order by 排序列表 asc|desc]
-- 查询每种学历有多少人 SELECT degree 学历,COUNT(*) AS 人数 FROM stu GROUP BY degree; -- 查询男生和女生各有多少人 SELECT sex AS 性别,COUNT(*) AS 人数 FROM stu GROUP BY sex; -- 查询哪些学历的人数超过3人 SELECT degree 学历,COUNT(*) AS 人数 FROM stu GROUP BY degree HAVING COUNT(*)>=3 ORDER BY COUNT(*)DESC; -- 查询每种学历的人数,并按人数进行降序排列 SELECT degree 学历,COUNT(*) AS 人数 FROM stu GROUP BY degree ORDER BY COUNT(*); -- 查询男生每种学历的人数 SELECT degree 学历,COUNT(*) AS 人数 FROM stu WHERE sex = 1 GROUP BY degree; |
6、分页查询
关键字:limit
limit row; -- 限制返回的行数
limit startindex,pagesize; -- startindex:每页中第一条记录的起始下标 -- pagesize:每页数据量
SELECT * FROM stu LIMIT 3; /* currentPage startIndex pageSize 第1页: 0 3 第2页: 3 3 第3页: 6 3 发现规律: starIndex = pageSize*(currentPage-1); */ SELECT * FROM stu LIMIT 0,3; SELECT * FROM stu LIMIT 3,3; SELECT * FROM stu LIMIT 6,3; |
- 子查询
1. 概述
一个查询语句中内嵌另一个完整的查询语句,被嵌套的语句称为子查询或者内查询
外面的语句称为主查询或者父查询。
2. 语法
select (子查询)
3. 特点
1. 子查询必须写在小括号中
2. 子查询优先执行,父查询需要用到子查询的结果
3. 子查询结果
单行子查询:结果只有一个 搭配的符号 = > < >= <= <>
多行子查询:结果多个 搭配的符号 in / not in / any / all
-- 1)查询和李小蒙年龄相同的学生信息 SELECT age FROM stu WHERE NAME = '李小蒙'; SELECT * FROM stu WHERE age = (SELECT age FROM stu WHERE NAME = '李小蒙'); -- 查询比李小蒙年龄大的同学的信息 SELECT * FROM stu WHERE age > (SELECT age FROM stu WHERE NAME = '李小蒙'); -- 2)查询年龄最大的学生姓名 SELECT NAME FROM stu WHERE age = (SELECT MAX(age) FROM stu); -- 3)查询和赵四年龄相同的学生信息 SELECT * FROM stu WHERE age IN (SELECT age FROM stu WHERE NAME='赵四'); -- 查询比赵四年龄大的同学信息(大于最小) SELECT * FROM stu WHERE age > ANY(SELECT age FROM stu WHERE NAME='赵四'); -- 查询比赵四年龄大的同学信息(大于最大) SELECT * FROM stu WHERE age > ALL(SELECT age FROM stu WHERE NAME='赵四'); |
- 表关系
在一个关系型数据库中,利用关系可以避免表中数据的冗余(重复数据),保证数据紧密性和方便查阅。
数据库中表关系有三种:
一对一:ONE_TO_ONE 人-身份证号 丈夫-妻子
一对多:ONE_TO_MANY 也叫多对一,表示同一种关系。 班级-学生 用户-订单
多对多:MANY_TO_MANY 学生-课程 商品-订单
- 一对一
特点:
- 数据库表中存在两张表,其中一张表的主键是另外一张表的外键,即两张表的主键关联
- 外键所在的表叫从表,另外一张表叫主表
- 添加数据的时候需要先添加主表数据,后添加从表数据
- 删除数据的时候需要先删除从表数据,后删除主表数据
#创建丈夫表 CREATE TABLE husband( hid INT PRIMARY KEY, hname VARCHAR(40) NOT NULL ); #创建妻子表 CREATE TABLE wife( wid INT PRIMARY KEY, wname VARCHAR(40) NOT NULL ); #创建外键约束 alter table wife add constraint foreign key (wid) references husband(hid) #插入数据 INSERT INTO husband(hid,hname) VALUES(1,'付笛生'); INSERT INTO husband(hid,hname) VALUES(2,'张嘉译'); INSERT INTO husband(hid,hname) VALUES(3,'唐伯虎'); INSERT INTO wife(wid,wname) VALUES(3,'秋香'); INSERT INTO wife(wid,wname) VALUES(2,'王海燕'); INSERT INTO wife(wid,wname) VALUES(1,'任静'); |
- 一对多
特点:
- 在两个表中,一张是多方表,一张是一方表,通常设置外键在多方表中,需要单独设置一个字段来作为外键,外键和主表的主键进行关联。
- 外键所在的表叫从表,外键关联的表叫主表
- 增加数据的时候需要先增加主表数据,后增加从表数据
- 删除的时候先删除从表数据后删除主表数据(如果删除主表数据,需要确认当前主表下面没有和从表数据有关联)
#创建部门表 CREATE TABLE dept( did INT PRIMARY KEY, dname VARCHAR(40) NOT NULL ); #创建员工表 CREATE TABLE emp( eid INT PRIMARY KEY AUTO_INCREMENT, did INT , ename VARCHAR(40), FOREIGN KEY (did) REFERENCES dept(did) ); #插入数据 INSERT INTO dept VALUES(1,'市场部'),(2,'教学部'),(3,'行政部'); INSERT INTO emp(did,ename)VALUES(1,'秋香'),(1,'王海燕'),(2,'任静'),(3,'付笛生'),(3,'张嘉译'); |
- 多对多
特点:
- 有两张表,还需要一张中间表,中间表用来存其他两张表的外键。多对多关系中,中间表是从表,其他两个表是主表。
- 增加数据的时候需要先增加主表,后增加中间表数据
- 删除先删除从表也就是中间表数据,在删除主表数据。如果要删除主表数据需要先确定中间表中有没有关联的数据存在,如果有不能删除。
#创建课程表 CREATE TABLE course( cid INT PRIMARY KEY, cname VARCHAR(40) ); #创建中间选课表 CREATE TABLE stu_conn_course( id INT, cid INT, FOREIGN KEY(id) REFERENCES stu(id), FOREIGN KEY(cid) REFERENCES course(cid) ); #插入数据 INSERT INTO course VALUES(1,'Java'),(2,'UI'),(3,'大数据'); SELECT * FROM course; SELECT * FROM stu; SELECT * FROM stu_conn_course; INSERT INTO stu_conn_course VALUES(1,1),(1,2),(2,1),(3,2); #测试删除 DELETE FROM stu_conn_course WHERE cid = 1; DELETE FROM course WHERE cid = 1; |
9、连接查询(多表查询)
连接查询定义:通过一定的连接条件将多个表中数据查询出来。
分类:内连接 外连接
1)内连接
实现方式:隐式内连接 显示内连接
- 隐式内连接:通过where关键字指定连接条件的查询。
语法:
select 列名1,列名2......(这些列来自于多个表)
from A,B
where A.id = B.id [and/or/not 查询条件]
案例:
-- 查询学生的姓名,年级名,年龄 SELECT NAME, gname ,age FROM stu,grade WHERE stu.gid = grade.gid; -- 查询女学生的姓名,年级名,年龄 SELECT NAME, gname ,age FROM stu,grade WHERE stu.gid = grade.gid AND sex = 0; -- 多表连接 -- 查询学生的姓名,年龄,所选课程名称 SELECT NAME,age,cname FROM stu s,course c,stu_conn_course sc WHERE s.id = sc.id AND c.cid = sc.cid |
- 显式内连接:通过inner join ...on来实现多表之间的连接查询。
语法:
select 列名1,列名2.....(列也是来自于多张表)
from A inner join B on A.id = B.id
[where 查询条件]
案例:
-- 查询学生的姓名,年级名,年龄 SELECT NAME, gname ,age FROM stu INNER JOIN grade ON stu.gid = grade.gid; -- 查询女学生的姓名,年级名,年龄 SELECT NAME, gname ,age FROM stu INNER JOIN grade ON stu.gid = grade.gid WHERE sex = 0; -- 多表连接 -- 查询学生的姓名,年龄,所选课程名称 SELECT NAME,age,cname FROM stu s INNER JOIN stu_conn_course sc ON s.id = sc.id INNER JOIN course c ON c.cid = sc.cid; |
注意:内连接查询中,多个表之间没有先后顺序要求。
2)外连接
定义:外连接是以一张表为基表,返回基表中所有记录及连接表中符合条件的记录,如果连接表中没有匹配数据则用null值填充。
分类:左外连接 右外连接
- 左外连接:以左表为基表,返回左表中所有记录以及右表中符合条件的记录,如果右表中没有匹配的数据是用null填充。
语法:left join .... on
select 列名1,列名2.....(列也是来自于多张表)
from A left join B on A.id = B.id
[where 查询条件]
- 右外连接:以右表为基表,返回右表中所有记录以及左表中符合条件的记录,如果左表中没有匹配的数据是用null填充。
语法:
select 列名1,列名2.....(列也是来自于多张表)
from A right join B on A.id = B.id
[where 查询条件]
案例:
-- 左外连接:查询所有班级名称和学生姓名,包括没有学生的班级也要显示出来 SELECT gname ,NAME FROM grade LEFT JOIN stu ON stu.gid = grade.gid; -- 右外连接:查询所有班级名称和学生姓名,包括没有学生的班级也要显示出来 SELECT gname ,NAME FROM stu RIGHT JOIN grade ON stu.gid = grade.gid; |
注意:外连接查询中左表与右表的顺序不能随意调换。如果是左外连接,left关键字左边的表是基表,如果是右外连接,right关键字右边的表是基表。
查询的原则:
1. 数据来源于多张表使用表连接
2. 数据来源于一张表使用子查询
三. 综合案例
在图书数据库的基础上,为book表添加一个新的字段cid,与图书分类表中的cid进行外键关联,同时,在图书表中创建外键约束。
-- 给book表添加新列
ALTER TABLE book ADD cid INT ;
-- 添加外键约束
ALTER TABLE book ADD CONSTRAINT fk_cid FOREIGN KEY (cid) REFERENCES booktype(cid);
完成以下查询练习:
-- 1.查询图书价格在30-70之间的图书信息
SELECT * FROM book WHERE price >=30 AND price<=70;
SELECT * FROM book WHERE price BETWEEN 30 AND 70;
-- 2.查询书名中包含“计算机”的图书信息
SELECT * FROM book WHERE title LIKE '%计算机%';
-- 3.查询2020年出版的图书的书名、作者及出版日期
SELECT title,author,pdate FROM book WHERE pdate LIKE '2020%'
-- 4.查询表中所有信息并将列指定别名显示
SELECT id 编号,title 书名,price 价格,author 作者,publisher 出版社,description 描述,pdate 出版日期
FROM book;
-- 5.查询图书的书名,价格,作者,并按价格进行降序排列
SELECT title,price,author FROM book ORDER BY price DESC;
-- 6.查询所有图书信息,并且先按价格进行降序排课,再按出版日期进行升序排列
SELECT * FROM book ORDER BY price DESC,pdate ASC;
-- 7.查询表中前两条图书的信息
SELECT * FROM book LIMIT 2;
-- 8.查询出版社是“北京”的图书的书名和作者
SELECT title,author FROM book WHERE publisher LIKE '%北京%';
-- 9.查询作者姓杨,且名字是2个字的图书信息
SELECT * FROM book WHERE author LIKE '杨_';
-- 10.查询作者是冰心且价格在50元以上的图书信息
SELECT * FROM book WHERE author = '冰心' AND price > 50;
-- 11.查询不是北京的出版社出版的图书信息
SELECT * FROM book WHERE publisher NOT LIKE '%北京%';
-- 12.查询价格最高的图书信息
SELECT * FROM book WHERE price = (SELECT MAX(price) FROM book);
-- 13.分页查询,假设每页显示3条数据,查询第2页3本图书的信息
SELECT * FROM book LIMIT 3,3;
-- 14.查询每种分类下图书的数量
SELECT cid,COUNT(*) FROM book GROUP BY cid;
-- 15.查询每类图书的平均价格
SELECT cid,AVG(price) FROM book GROUP BY cid;
-- 16.查询显示图书的分类名称、图书名和图书的价格
SELECT cname,title,price
FROM booktype t INNER JOIN book b ON t.cid = b.cid;
-- 17.查询所有图书的分类名和图书名,包括没有图书的分类信息也要显示
SELECT cname,title
FROM booktype t LEFT JOIN book b ON t.cid = b.cid;
小白学习Java第二十九天相关推荐
- 小白学习Java第二十六天
今日内容 BOM模型,重点定时器 jQuery简介 jQuery使用步骤 jQuery选择器 jQuery事件 jQuery中的循环 一.BOM (一)BOM简介 1.Bom(browser obje ...
- Python学习笔记第二十九天(N维数组(ndarray))
Python学习笔记第二十九天 N维数组(ndarray) 构建阵列 索引阵列 ndarray的内部内存布局 阵列属性 内存布局 数据类型 其他属性 阵列接口 ctypes外部功能接口 Array方法 ...
- 小白学习Java第二十八天
今日内容 数据库简介 MySQL的安装.卸载与管理 SQL语言(DDL DML) 约束 一. 数据库简介 (一)理解 用于持久化保存数据的管理软件 保存数据的技术: 1. 将数据保 ...
- 学习Java第二十五天--集合框架之集合嵌套案例
Map集合和其它集合嵌套的案例.以及Map集合和Map集合嵌套的案例 案例1:Map和ArrayList的嵌套 案例2:Map和Map的嵌套 案例1:Map和ArrayList的嵌套 import j ...
- 小白学习Java第二十三天<进入Javaweb>
课程介绍: 今日内容: HTML概述 软件架构 HTML语言介绍 HTML入门案例 HTML常见标签 文本标签 ...
- Python学习日记-第二十九天-tcp(客户端)
系列文章目录 tcp介绍 tcp特点 tcp客户端 一.tcp介绍 Tcp协议,传输控制协议是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义 TCP通信需要经过创建 ...
- 学习Java第十九天(一):1、Java中的网络编程
1.Java中的网络编程 什么是网络? 在计算机领域中网络是信息传输,接收共享的虚拟平台,通过它把各个点,面,体的联系到一起,从而实现这些资源的共享. 作用:信息传输,资源共享 有点:资源共享免费 O ...
- 学习Java第二十四天
目录 一.网络编程 1.概述 2.三要素 二.IP地址 1.分类 2.方法 三.UDP 1.通信原理 2.发送数据 3.接收数据 四.TCP 1.原理 2.发送数据 2.接收数据 一.网络编程 1.概 ...
- 自学前端第二十九天 CSS高级之细节技巧
第二十九天 css高级细节技巧 一.background-color :属性设置元素的背景颜色. 定义和用法 background-color 属性设置元素的背景颜色. 元素背景的范围 backgro ...
最新文章
- Spring是怎样诞生的?
- 网络基准测试Netperf
- mysql char null_关于mysql设置varchar 字段的默认值''和null的区别,以及varchar和char的区别...
- Jquery对象和dom对象获取html的方法
- JavaScript中的Date对象在Safari与IOS中的“大坑”
- [家里蹲大学数学杂志]第236期钟玉泉复变函数论前六章第二组习题参考解答
- oracle 如何迁移到 mysql_怎么将数据库从Oracle迁移到SQL Server,或从Oracle迁移到MySQL...
- SQL SERVER数据库的简单介绍
- SpringBoot2.x(3)---基础入门
- C Primer Plus怎样高效学?C语言大神案例值得借鉴!
- react 点击使父元素消失_在 React 组件中使用 Refs 指南
- 获取和分析Dump的几种工具简介
- 电脑重启只剩下c盘怎么办_win10突然只剩下c盘了怎么办|win10突然只剩下c盘的解决方法...
- sqlite3基础学习
- 苹果发布会:或将发布一款付费游戏订阅服务
- 行业标准 | 证券期货业信息系统运维管理规范 JR/T 0099—2012
- MySQL 用户管理 - 添加用户、授权、删除用户
- 目前最火热的IT技术有哪些?
- PPP概念股有哪些?PPP概念股大全
- 第一周python学习