必威体育Betway必威体育官网
当前位置:首页 > IT技术

数据库的深入学习

时间:2019-07-19 22:12:09来源:IT技术作者:seo实验室小编阅读:80次「手机版」
 

数据库学习

首先输入以下代码,创建出几个表,方便使用
## 学生表
CREATE TABLE student(
	stuid VARCHAR(10) PRIMARY KEY,
	stuname VARCHAR(50)
);

## 分数表
CREATE TABLE score(
	stuid VARCHAR(10),
	score INT,
	courseid INT
);

## 科目表
CREATE TABLE course(
	courseid VARCHAR(10) PRIMARY KEY,
	cname VARCHAR(50)
);

## A表
create table A(
	name varchar(10),
	score int
);

## B表
create table B(
	name varchar(10),
	score int
);

insert into A values('a',10),('b',20),('c',30);
insert into B values('a',10),('b',20),('d',40);

A表如下

在这里插入图片描述

B表如下

在这里插入图片描述

创建出学生表,添加几个记录,如下

在这里插入图片描述

创建出科目表,添加几个记录,如下

在这里插入图片描述

创建出分数表,添加几个记录,如下

在这里插入图片描述

合并查询(把两张表的记录合并到一起 , 关键词UNION)
  • 取两张表交集(字段名数据类型相同)
SELECT * FROM a
UNION ALL
SELECT * FROM b;

在这里插入图片描述

注意:出现重复数据,应该把all去掉,正确代码如下

SELECT * FROM a
UNION
SELECT * FROM b;

在这里插入图片描述

  • 学生表和分数表一起查询
SELECT * FROM student,score;

在这里插入图片描述

注意:出现重复数据,去除重复数据(99查询法,通过两张表关联的字段相等来去除重复数据)

SELECT * FROM student,score 
WHERE student.stuid=score.stuid;

在这里插入图片描述

  • 查询学生姓名和学生的分数(利用学生表和分数表)
SELECT student.stuname,score.score FROM student,score
WHERE student.stuid=score.stuid;

在这里插入图片描述

  • 起别名(多表查询时不一定要有外键)
SELECT s.stuname,sc.score FROM student s,score sc
WHERE s.stuid=sc.stuid;

在这里插入图片描述

  • 同时查询学生表,分数表和科目表并去除重复
SELECT * FROM student s,score sc,course c 
WHERE s.stuid=sc.stuid
AND
sc.courseid=c.courseid;

在这里插入图片描述

  • 查询学生的名字对应的分数和科目
SELECT s.stuname,sc.score,c.cname FROM student s,score sc,course c 
WHERE s.stuid=sc.stuid
AND
sc.courseid=c.courseid;

在这里插入图片描述

  • 查询表中80分以上学生的姓名,分数和科目信息
SELECT s.stuname,sc.score,c.cname FROM student s,score sc,course c 
WHERE s.stuid=sc.stuid
AND
sc.courseid=c.courseid
AND sc.score>80;

在这里插入图片描述

链接查询(多表查询)
分为:内链接,外链接,自然链接
内链接写法:内链接 表1 INNER(可以省略) JOIN 表2 ON 去除重复的条件
  • 查询学生表和分数表
SELECT * FROM student s
JOIN
score sc
ON s.stuid=sc.stuid;

在这里插入图片描述

查询学生表,科目表和分数表(注意:on后面只能加去除重复的条件)

SELECT * FROM student s
JOIN
score sc
ON s.stuid=sc.stuid
JOIN
course c
ON sc.courseid=c.courseid
WHERE sc.score>80;
外连接(OUTER JOIN ON)
  • 左外链接left(以左边那张表为主,会输出这个表的全部数据)
  • 右外链接right(以右边那张表为主,会输出这个表的全部数据)
SELECT * FROM student s
LEFT  JOIN
score sc
ON s.stuid=sc.stuid;

在这里插入图片描述

自然链接(NATURAL JOIN)
  • 自动匹配表中关联条件(字段名和类型相同)
SELECT * FROM student 
NATURAL JOIN score;

在这里插入图片描述

子查询(嵌套查询)

首先制作2张表

表名emp

在这里插入图片描述

表名dept

在这里插入图片描述

  • 查询工资高于JONES的员工信息

1.先查Jones工资,查出工资为2975

SELECT sal FROM emp WHERE ename='jones';

2.利用Jones工资当条件,查询工资高于JONES的员工信息

SELECT * FROM emp WHERE sal>2975;

3.可以将两个sql语句嵌套在一起

SELECT * FROM emp WHERE sal>(
SELECT sal FROM emp WHERE ename='jones'
);

在这里插入图片描述

  • 查询与SCOTT同一个部门的员工
SELECT * FROM emp WHERE deptno=(
SELECT deptno FROM emp WHERE ename='scott'
); 

在这里插入图片描述

  • 查询工资高于30号部门所有人的员工信息
SELECT * FROM emp WHERE sal>(
SELECT MAX(sal) FROM emp WHERE deptno=30
);

在这里插入图片描述

  • 查询工作和工资与MARTIN(马丁)完全相同的员工信息
SELECT * FROM emp WHERE job=(
SELECT job FROM emp WHERE ename='MARTIN'
)AND sal=(
SELECT sal FROM emp WHERE ename='MARTIN'
);

在这里插入图片描述

  • 查询有2个以上直接下属的员工信息(mgr这列一共出现几次,这个人就有几个下属)
SELECT * FROM emp WHERE empno in(
SELECT mgr FROM emp GROUP BY mgr HAVING COUNT(mgr)>=2
);

在这里插入图片描述

  • 查询员工编号为7788的员工名称、员工工资、部门名称、部门地址
SELECT e.ename,e.sal,d.dname,d.loc FROM emp e,dept d WHERE e.deptno=d.deptno AND empno=7788;

在这里插入图片描述

自连接
  • 查询7369员工编号、姓名、经理编号和经理姓名
SELECT e1.empno,e1.ename,e2.empno,e2.ename FROM emp e1,emp e2 
WHERE e1.empno=e2.mgr
AND e2.empno=7369;

在这里插入图片描述

  • 查询各个部门薪水最高的员工所有信息(将查询完返回的数据,当做一张新表来使用)
SELECT * FROM emp e1,(
SELECT deptno,MAX(sal) msal FROM emp GROUP BY deptno
)e2 WHERE e1.deptno=e2.deptno
AND e1.sal=e2.msal;

在这里插入图片描述

JDBC(java DataBase Connection)

定义:是java为连接数据库提供的一套规范(接口)

连接数据库步骤:

1.加载驱动(注册驱动类)

2.获取数据库链接(通过数据库账号密码)

3.通过数据库链接对象获取sql语句的执行对象

4.使用sql执行对象,执行sql语句

5.接收执行sql后,处理结果集

6.关闭资源

制作一个表

在这里插入图片描述

Eclipse插入一条数据

	public static void main(String[] args) throws SQLException, ClassnotfoundException {
		// 注册驱动
		// 使用反射来加载驱动类
		class.forname("com.mysql.jdbc.Driver");
		// 获取链接
		// 参数url:数据库的地址
		// jdbc:mysql://主机ip地址:数据库端口号/数据库名
		// jdbc:mysql://localhost:3306/wljdbc01
		String url ="jdbc:mysql://localhost:3306/wljdbc01";
		String user ="root";
		String password ="123456";
		Connection connection = DriverManager.getConnection(url, user, password);
		// 通过数据库链接对象获取sql语句的执行对象
		statement statement = connection.createStatement();
		// 使用sql执行对象 执行sql语句
		// statement.executeLargeUpdate(sql) 执行DDL,DML语句
		// statement.executequery(sql)       执行DQL语句
		// 插入一条数据
		String sql = "insert into sort"
				+ "(sname,sprice,sdesc)values"
				+ "('柜子','30','方便好用包邮')";
		int row = statement.executeUpdate(sql);
		System.out.println("受影响的行数"+row);
		// 关闭资源
		// 关闭连接对象
		connection.close();
		// 关闭sql语句执行对象
		statement.close();
	}

相关阅读

【机器学习】代价函数,损失函数,目标函数区别

一:损失函数,代价函数,目标函数定义首先给出结论:损失函数(Loss Function )是定义在单个样本上的,算的是一个样本的误差。代价函数(Cost F

冯耀宗:我的SEO学习心得

一千个读者就有一千个哈利波特,无论是读书还是学习我们每个人都不尽相同,学习SEO知识也是一样,当你踏入这个行业你会选择何种方式来

数据库中常说的steal和force到底是什么

时长在看一些database paper的时候看到steal和no-force的字样,深入了解了一下,发现我们平时关注的redo log个undo log都是有渊源的,

Win7下搭建深度学习环境

在 CSDN上看过很多有所帮助的 Blog,小白在此先行谢过。从没想过会注册 CSDN账号,更别说自己写一些什么东西了。似乎早已过了懵懂的

【学习笔记】信息系统项目监理“四控三管一协调”以及

四控:质量控制、投资控制、进度控制、变更控制。三管:合同管理、信息管理和安全管理。一协调:沟通协调。根据工程监理的深入程度不同

分享到:

栏目导航

推荐阅读

热门阅读