Mysql数据库入门 (基础知识点 由来 各种指令 如何运用)

目录

数据库DataBase

SQL语言分类

DDL数据定义语言

数据库相关SQL

表相关SQL语句

DML数据操作语言

数据类型

主键约束

主键约束+自增

导入*.sql批处理文件

is null 和 is not null

去重 distinct

and和or

比较运算符 > < >= <= = != 和<>

in关键字

between x and y 包含x和y

模糊查询like

排序 order by

分页查询limit

别名

数值计算 + - * / %

聚合函数

分组查询 group by

各个关键字的顺序

having

子查询(嵌套查询)

关联关系

关联查询

关联查询之等值连接

关联查询之内连接

关联查询之外连接

关联查询总结:

JDBC

如何使用JDBC

Statement执行SQL语句的对象

总结


数据库DataBase

  • 学习数据库主要就是学习如何对数据进行增删改查操作

  • 平时所说的数据库(DBMS数据库管理系统)实际上就是一款软件, 电脑上安装了这个软件,电脑就可以称为数据库服务器

  • 常见的DBMS:

    • MySQL: Oracle公司产品, MySQL 08年被Sun公司收购,09Sun公司被Oracle收购. 目前市占率排名第一, 开源软件, 原MySQL创始人从Oracle离开创办MariaDB
    • Oracle: Oracle公司产品, 拉里埃里森32, 闭源产品, 性能最高价格最贵. 市占率排名第二
    • SQLServer: 微软公司产品,闭源产品, 市占率第三, 主要应用在微软的整套解决方案中
    • DB2: IBM公司产品,闭源产品 主要应用在IBM整套解决方案中.
    • SQLite: 轻量级数据库 安装包只有几十k,主要应用在移动设备或嵌入式设备中
  • 网站开发整套解决方案:

    网站= 开发语言(Java/php/.net)+webServer+操作系统(linux/windows/mac os等)+数据库(MySQL/Oracle/SQLServer....)

  • 开源和闭源:

    • 开源:开放源代码, 免费 盈利方式:通过卖服务 , 有技术大拿无偿维护升级
    • 闭源: 不公开源代码, 盈利方式:通过卖产品和服务 , 有技术大拿攻击(但是闭源产品公司一般都比较有钱 养一群人维护升级)
  • 学习数据库主要需要掌握一门语言 SQL(Structured Query Language) 结构化查询语言 用于程序员和数据库软件之间进行交流

  • 执行SQL语句需要先连接数据库

    • windows: 开始->所有程序->MariaDB或MySQL->MySQL Client 点击运行 输入密码后回车

    • linux: 在桌面空白区域右键打开终端,输入mysql -uroot -p 回车,输入密码后再回车

  • 常见错误:

需要检查MySQL服务是否开启:

​ 我的电脑上右键->管理->服务->找到MySQL 查看是否显示正在运行,如果没有 右键启动

SQL语言分类

  • DDL: 数据定义语言, 负责数据库和表相关的操作
  • DML: 数据操作语言, 负责对数据进行增删改查
  • DQL: 数据查询语言, 只负责查询
  • TCL: 事务控制语言, 负责处理事务相关
  • DCL: 数据控制语言, 负责创建用户及分配用户权限相关

DDL数据定义语言

  • 往数据库软件中保存数据,需要先创建数据库, 在数据库里面创建表, 最后往表里面插入数据

数据库相关SQL

  • 查询所有数据库

    • 格式: show databases;
  • 创建数据库

    • 格式: create database 数据库名;

    • 指定字符集格式: create database 数据库名 character set utf8/gbk;

    • 举例:

      • create database db1;
      • create database db2 character set utf8;
      • create database db3 character set gbk;
  • 查询数据库详情

    • 格式: show create database 数据库名;
    • 举例: show create database db1;
  • 删除数据库

    • 格式: drop database 数据库;
    • 举例:
      • drop database db3;
  • 使用数据库

    • 格式: use 数据库名;
    • 举例: use db2;

表相关SQL语句

  • 操作表必须提前使用了某个数据库不然会报错 No database selected

  • 查询所有表

    • 格式: show tables;
  • 创建表

    • 格式: create table 表名(字段1名 类型,字段2名 类型 .....);
    • 指定字符集格式: create table 表名(字段1名 类型,字段2名 类型 .....)charset=utf8/gbk;
    • 举例:
      • create table person(name varchar(50),age int);
      • create table user(username varchar(50),password varchar(50))charset=utf8;
  • 查询表详情

    • 格式: show create table 表名;
    • 举例:
      • show create table person;
      • show create table user;
  • 删除表

    • 格式:drop table 表名:
    • 举例: drop table user;
  • 修改表名

    • 格式: rename table 原名 to 新名;
    • 举例: rename table person to per;
  • 添加表字段

    • 最后面添加格式: alter table 表名 add 字段名 类型;
    • 最前面添加格式: alter table 表名 add 字段名 类型 first;
    • 在xxx字段的后面添加: alter table 表名 add 字段名 类型 after 字段名;
    • 举例:
      • alter table per add gender varchar(5);
      • alter table per add id int first;
      • alter table per add hobby varchar(20) after name;
  • 查看表字段

    • 格式: desc 表名;
    • 举例: desc per;
  • 删除表字段

    • 格式: alter table 表名 drop 字段名;
    • 举例: alter table per drop hobby;
  • 修改表字段

    • 格式: alter table 表名 change 原名 新名 新类型;
    • 举例: alter table per change id pid int;

DML数据操作语言

  • 操作数据必须使用了某个数据库并且保证已经创建了保存数据的表

create database mydb3 character set utf8;

use mydb3;

create table person(name varchar(50),age int) charset=utf8;

  • 插入数据

    • 全表插入格式: insert into 表名 values(值1,值2);

      insert into person values('Tom',18);

    • 指定字段插入格式: insert into 表名(字段1名,字段2名) values(值1,值2);

      insert into person(name)values("Jerry");

    • 批量插入

      insert into person values('AAA',10),('BBB',11),('CCC',12);

      insert into person(name)values("XXX"),("YYY"),("ZZZ");

    • 中文问题

      insert into person values("刘德华",50);

      如果执行以上SQL语句 报以下错误 在终端中执行 set names gbk; 回车 再次输入即可.

  • 查询数据

    • 格式: select 字段信息 from 表名 where 条件;
    • 举例:
      • select * from person; 查询所有数据
      • select name from person; 只查名字
      • select * from person where age<12; 查询年龄小于12岁的信息
  • 修改数据

    • 格式: update 表名 set 字段1名=值,字段2名=值 where 条件;
    • 举例:
      • update person set age=20 where name='Jerry';
      • update person set name='张学友' where age=12;
  • 删除数据

    • 格式: delete from 表名 where 条件;
    • 举例:
      • delete from person where age<20;
      • delete from person where name='Jerry';
      • delete from person where age is null;
      • delete from person;

数据类型

  1. 整数 int(m) 和 bigint(m)

    m代表显示长度, m=10 18 0000000018 起到补零的作用, 需要和zerofill关键字结合使用

    举例: create table t1(name varchar(10),age int(10) zerofill);

    ​ insert into t1 values('Tom',18);

    ​ select * from t1;

  2. 浮点数 double(m,d)

    m代表总长度 d代表小数长度 23.532 m=5 d=3 ,decimal(m,d) 是超高精度浮点数 只有涉及超高精度运算时使用

  3. 字符串

    • char(m): m代表字符长度 , 固定长度 m=10 存"abc" 占10 , 执行效率略高 最大长度255
    • varchar(m): 可变长度, m=10 存"abc" 占3 节省空间 最大长度65535 ,建议保存255以内的字符串 超过255使用text
    • text(m):可变长度 最大长度65535
  4. 日期

    • date 只能保存年月日

    • time 只能保存时分秒

    • datetime 默认值null 最大值 9999-12-31

    • timestamp 时间戳默认值当前系统时间 最大值为2038-1-19

      举例: create table t_date(t1 date,t2 time,t3 datetime,t4 timestamp);

      insert into t_date values("2020-10-10",null,null,null);

      insert into t_date values(null,"12:10:18","2018-11-16 15:33:23",null);

主键约束

  • 什么是主键: 表示数据唯一性的字段称为主键

  • 什么是约束: 创建表时给表字段添加的限制条件

  • 主键约束primary key: 唯一且非空

    举例: create table t3(id int primary key,name varchar(10));

    insert into t3 values(1,'aaa');

    insert into t3 values(1,'bbb'); //报错 主键值重复 

    insert into t3 values(null,'ccc'); //报错 主键值不能为null 

主键约束+自增

  • 自增规则:从历史最大值+1

create table t4(id int primary key auto_increment,name varchar(10));

insert into t4 values(null,'aaa'); 1

insert into t4 values(null,'bbb'); 2

insert into t4 values(10,'bbb'); 10

insert into t4 values(null,'ccc'); 11

delete from t4 where id>9;

insert into t4 values(null,'ddd'); 12

导入*.sql批处理文件

  • 下载 emp.zip 解压出emp.sql 放到某个盘的根目录 其它操作系统放到桌面

  • 在终端执行以下命令

    source c:/emp.sql;

  • 测试 select * from emp; 如果有乱码 执行 set names gbk; 再查

is null 和 is not null

  1. 查询没有上级领导的员工信息

    select * from emp where mgr is null;

  2. 查询有上级领导的员工姓名和领导编号

    select ename,mgr from emp where mgr is not null;

去重 distinct

  1. 查询员工表中出现的不同的工作有哪些

    select distinct job from emp;

  2. 查询员工表中出现的部门编号 去掉重复

    select distinct deptno from emp;

and和or

  • and 类似java中的&&
  • or 类似java中的||
  1. 查询1号部门工资低于2000的员工信息

    select * from emp where deptno=1 and sal<2000;

  2. 查询3号部门或工作是程序员的员工信息

    select * from emp where deptno=3 or job='程序员';

  3. 查询有上级领导的员工中工资小于2000的员工姓名,工资和领导编号

    select ename,sal,mgr from emp where mgr is not null and sal<2000;

比较运算符 > < >= <= = != 和<>

  1. 查询不是程序员的员工中工资小于等于1600的员工信息

    select * from emp where job !='程序员' and sal<=1600;

    select * from emp where job <>'程序员' and sal<=1600;

in关键字

  1. 查询工资为3000,1500,5000的员工信息

select * from emp where sal=3000 or sal=1500 or sal=5000;

select * from emp where sal in(3000,1500,5000);

  1. 查询工资不是3000,5000的员工信息

select * from emp where sal!=3000 and sal!=5000;

select * from emp where sal not in(3000,5000);

between x and y 包含x和y

  1. 查询工资在1000到2000之间的员工信息

    select * from emp where sal between 1000 and 2000;

  2. 查询工资在1000到2000之外的员工信息

    select * from emp where sal not between 1000 and 2000;

模糊查询like

  • _:代表1个未知字符
  • %:代表0或多个未知字符
  • 举例:
    • 以x开头 x%
    • 以x结尾 %x
    • 第二个是x _x%
    • 包含x %x%
    • 第2个是x倒数第三个是y x%y_
  1. 查询名字中包含悟字的员工姓名

    select ename from emp where ename like "%悟%";

  2. 查询工作中第二个字是售 的员工信息

    select * from emp where job like '_售%';

  3. 查询名字中以精结尾的员工姓名

    select ename from emp where ename like '%精';

  4. 查询姓孙的员工信息

    select * from emp where ename like '孙%';

排序 order by

  • 格式: order by 字段名 asc升序(默认)/desc降序
  1. 查询每个员工的姓名和工资 按照工资升序排序

    select ename,sal from emp order by sal;

  2. 查询每个员工的姓名和工资,按照工资降序排序

    select ename,sal from emp order by sal desc;

  • 多字段排序; 在order by后面写多个字段用逗号分隔
  1. 查询每个员工的姓名工资和部门编号,按照部门编号升序排序 如果部门编号一致则按照工资降序排序

    select ename,sal,deptno from emp order by deptno,sal desc;

分页查询limit

  • 格式: limit 跳过的条数,请求条数(每页的条数)

  • 格式: limit (请求页数-1)*每页条数,每页条数

    请求5页的8条 32,8

    3页10条 20,10

    9页20条 (9-1)*20,20

  1. 查询员工姓名和工资按照工资降序排序查询前三条

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

  2. 查询第二页的4条数据

    select * from emp limit 4,4;

  3. 查询第3页的3条数据

    select * from emp limit 6,3;

  4. 查询最惨员工信息(工资最低)

    select * from emp order by sal limit 0,1;

别名

  • 对查询的字段名起一个新的名字

select ename as '姓名' from emp;

select ename '姓名' from emp;

select ename 姓名 from emp;

数值计算 + - * / %

  1. 查询每个员工的姓名 工资和年终奖(年终奖=5个月的工资)

    select ename,sal,5*sal 年终奖 from emp;

  2. 查询1号部门员工的姓名/工资和涨薪5块钱之后的工资

select ename,sal,sal+5 涨薪后 from emp where deptno=1;

聚合函数

  • 对查询的多条数据进行统计查询
  • 统计方式: 求平均值, 最大值,最小值, 求和, 计数
  1. 平均值avg(字段名)

    • 查询2号部门的平均工资

      select avg(sal) from emp where deptno=2;

    • 查询程序员的平均工资

      select avg(sal) from emp where job='程序员';

  2. 最大值max(字段名)

    • 查询1号部门的最高工资

      select max(sal) from emp where deptno=1;

  3. 最小值min(字段名)

    • 查询销售的最低工资

      select min(sal) from emp where job='销售';

  1. 求和sum(字段名)

    • 查询销售工作的工资总和

      select sum(sal) from emp where job like '%销售%';

  2. 计数count(字段名) count(*)

    • 查询1号部门员工人数

      select count(*) from emp where deptno=1;

分组查询 group by

  • 格式: group by 字段名
  • 以分组字段相同值的数据为一组 进行统计查询
  1. 查询每个部门的平均工资

    select deptno,avg(sal) from emp group by deptno;

  2. 查询每个部门的最高工资

    select deptno,max(sal) from emp group by deptno;

  3. 查询每种工作的人数

    select job,count(*) from emp group by job;

  4. 查询1号部门每种工作的人数

    select job,count(*) from emp where deptno=1 group by job;

各个关键字的顺序

select * from 表名 where 条件 group by 分组字段 order by 排序字段 limit 跳过条数,请求条数

select * from 表名 where 普通字段条件 group by 分组字段 having 聚合函数条件 order by 排序字段 limit 跳过条数,请求条数;

having

  • where后面只能写普通字段的条件, 聚合函数条件需要写在having后面, having写在group by的后面 要和分组查询结合使用

  1. 查询每个部门的平均工资要求只查询平均工资大于2000的信息

select deptno,avg(sal) from emp group by deptno having avg(sal)>2000 ;

  1. 查询只有一个人的工作名称

    select job,count(*) c from emp group by job having c=1;

  2. 查询每个部门的工资总和,只查询有领导的员工,并且要求工资总和高于5400;

    select deptno,sum(sal) s from emp where mgr is not null group by deptno having s>5400;

  3. 查询每个部门的平均工资,只查询工资在1000到3000之间的,并且过滤掉平均工资低于2000的部门

    select deptno,avg(sal) a from emp where sal between 1000 and 3000 group by deptno having a>=2000;

  4. 查询每种工作的人数要求人数大于1个,并且只查询1号部门和2号部门的员工, 按照人数降序排序

    select job,count(*) c from emp where deptno in(1,2) group by job having c>1 order by c desc;

子查询(嵌套查询)

  1. 查询工资高于1号部门平均工资的员工信息

select avg(sal) from emp where deptno=1;

select * from emp where sal>(select avg(sal) from emp where deptno=1);

  1. 查询工资最高的员工信息

    select max(sal) from emp;

    select * from emp where sal=(select max(sal) from emp);

  2. 查询工资高于2号部门最低工资的员工信息

    select min(sal) from emp where deptno=2;

    select * from emp where sal>(select min(sal) from emp where deptno=2);

  3. 查询和孙悟空相同工作的其它员工信息

    select job from emp where ename='孙悟空';

    select * from emp where job=(select job from emp where ename='孙悟空') and ename!='孙悟空';

  4. 查询拿最低工资员工的同事们的信息(同事指相同部门)

    select min(sal) from emp; //得到最低工资

    select deptno from emp where sal=(select min(sal) from emp);//最低工资的部门编号

    select * from emp where deptno=(select deptno from emp where sal=(select min(sal) from emp)) and sal!=(select min(sal) from emp);

  5. 查询白骨精的部门信息(需要用到部门表)

    select deptno from emp where ename='白骨精';

    select * from dept where deptno=(select deptno from emp where ename='白骨精');

关联关系

  • 创建表时,表和表之间存在的业务关系

  • 有哪几种关系?

    • 一对一:有AB两张表,A表中一条数据对应B表中的一条数据,同时B表中的一条数据也对应A表中的一条数据 称为一对一关系

    • 一对多:有AB两张表,A表中一条数据对应B表中的多条数据,同时B表中的一条数据对应A表中的一条数据 称为一对多关系

    • 多对多:有AB两张表,A表中一条数据对应B表中的多条数据,同时B表中的一条数据也对应A表中的多条数据 称为多对多关系

  • 表和表之间如何建立关系?

    通过一个单独的字段指向另外一个表的主键,这个单独的字段称为外键.

关联查询

  • 同时查询多张存在关联关系的表时,使用的查询查询方式称为关联查询

  • 关联查询的方式有三种: 1. 等值连接 2.内连接 3. 外连接

关联查询之等值连接

  • 格式: select * from A,B where A.x=B.x(关联关系) and A.age>30;

  1. 查询1号部门每一个员工的姓名和对应的部门名

    select e.ename,d.dname

    from emp e,dept d

    where e.deptno=d.deptno and e.deptno=1;

  2. 查询工资高于2000的员工姓名/工资和工作地点(部门地点)

    select ename,sal,loc

    from emp e,dept d

    where e.deptno=d.deptno and e.sal>2000;

关联查询之内连接

  • 和等值连接作用一样, 查询的是两张表的交集数据

  • 格式: select * from A,B where A.x=B.x(关联关系) and A.age>30;

  • 格式: select * from A join B on A.x=B.x(关联关系) where A.age>30;

  1. 查询1号部门每一个员工的姓名和对应的部门名

    select ename,dname

    from emp e join dept d

    on e.deptno = d.deptno

    where e.deptno=1;

关联查询之外连接

  • 查询的是一张表的全部和另外一张表的交集

insert into emp (empno,ename) values(100,'Tom');

  • 格式: select * from A left/right join B on A.x=B.x(关联关系) where A.age>30;

  1. 查询所有员工的名字和对应的部门名

    select e.ename,d.dname

    from emp e left join dept d

    on e.deptno=d.deptno;

关联查询总结:

  1. 如果查询的是两张表的交集数据使用等值连接或内连接(推荐)

  2. 如果查询的是一张表的全部和另外一张表的交集则使用外连接

JDBC

  • Java DataBase Connectivity: java数据库连接

  • 学习JDBC主要学习的就是如何通过java代码执行SQL语句

  • JDBC实际上是Sun公司定义的一套用户和各种数据库软件进行连接的API(Application Programma Interface应用程序编程接口)

  • 为什么使用JDBC, 如果没有JDBC Java程序员连接每一种数据库都需要学习一套全新的方法, Sun公司为了避免出现这种情况 定义出了一套JDBC接口里面是一堆方法的声明,各个数据库厂商根据此接口里面的方法声明写各自的实现类(驱动),这样Java程序员只需要掌握JDBC接口中方法调用 即可访问任何数据库.

如何使用JDBC

  1. 创建一个maven工程

  2. 把MySQL相关jar包的坐标信息写到pom.xml文件中

    <!-- 连接MySQL数据库的依赖 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.15</version>
    </dependency>
  3. 创建Demo01.java

    //1.注册驱动 告诉编译器使用的数据库是什么
    Class.forName("com.mysql.cj.jdbc.Driver");
    //2.获取连接对象
    Connection conn =
            DriverManager.getConnection("jdbc:mysql://localhost:3306/newdb3?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true",
                    "root","root");
    System.out.println(conn);
    //3.创建SQL执行对象
    Statement s = conn.createStatement();
    //4.执行SQL语句
    String sql = "create table jdbct1(name varchar(10),age int)";
    s.execute(sql);
    System.out.println("创建完成!");
    //5.关闭资源
    conn.close();

Statement执行SQL语句的对象

  • execute(sql); 可以执行任何SQL语句 但是推荐执行DDL(数据库相关和表相关SQL语句)

  • executeUpdate(sql); 执行增删改相关的SQL语句

  • executeQuery(sql); 执行查询相关的SQL语句

总结

数据库相关SQL
查询所有: show databases;
创建数据库: create database db1 character set=utf8/gbk;
查询详情: show create database db1;
删除数据库: drop database db1;
使用数据库: use db1;

表相关SQL
查询所有表: show tables;
创建表: create table t1(name varchar(50),age int) charset=utf8/gbk;
查询详情: show create table t1;
查询表字段: desc t1;
删除表: drop table t1;
修改表名:rename table t1 to t2;
添加表字段: alter table t1 add 字段名 类型 first/after xxx;
删除表字段: alter table t1 drop 字段名
修改表字段: alter table t1 change 原名 新名 新类型;

数据相关SQL
插入数据: insert into t1(字段1名,字段2名) values(值1,值2),(值1,值2),(值1,值2);
查询数据: select * from t1 where 条件;
修改数据: update t1 set xxx=xxx where 条件;
删除数据: delete from t1 where 条件;

数据类型

1.整数 int(m) 和 bigint(m)
create table t1(name varchar(10),age int(10) zerofill);
2.浮点数 double(m,d)
m代表总长度 d代表小数长度23.532,m=5,d=3,decimal(m,d)是超高精度浮点数 只有涉及超高精度运算时使用
3.字符串
   - char(m): m代表字符长度,固定长度m=10存"abc"占10字节省空间最大长度255
   - varchar(m):可变长度,m=10存"abc"占3 节省空间,最大长度65535,建议保存255以内的字符串 超过255使用text
   - text(m):可变长度 最大长度65535 
4. 日期
   - date 只能保存年月日
   - time 只能保存时分秒
   - datetime   默认值null  最大值 9999-12-31
   - timestamp 时间戳默认值当前系统时间 最大值为2038-1-19 
     举例:  create table t_date(t1 date,t2 time,t3 datetime,t4 timestamp);
     insert into t_date values("2020-10-10",null,null,null);
     insert into t_date values(null,"12:10:18","2018-11-16 15:33:23",null);
主键约束primary key:  唯一且非空
create table t3(id int primary key,name varchar(10));
主键约束+自增
create table t4(id int primary key auto_increment,name varchar(10));
is null 和 is not null
and和or
比较运算符 > < >= <= =    != 和<>
in关键字 临界
between x and y  包含x和y
模糊查询like

_:代表1个未知字符
%:代表0或多个未知字符
以x开头      x%
以x结尾      %x
第二个是x    _x%
包含x        %x%
第2个是x倒数第三个是y      _x%y__
排序 order by 字段名 asc升序(默认)/desc降序 
分页查询limit  
别名
select ename as '姓名' from emp;
select ename '姓名' from emp;
select ename 姓名 from emp;
数值计算 + - * / %
聚合函数
平均值avg(字段名)
最大值max(字段名)
最小值min(字段名)
求和sum(字段名)
计数count(字段名)      count(*)  
分组查询 group by 字段名
having
where后面只能写普通字段的条件, 聚合函数条件需要写在having后面, having写在group by的后面  要和分组查询结合使用
各个关键字的顺序
select * from 表名 where 普通字段条件 group by 分组字段 having 聚合函数条件 order by 排序字段  limit 跳过条数,请求条数;
子查询(嵌套查询)
查询工资最高的员工信息
select * from emp where sal=(select max(sal) from emp);
关联关系
一对一
一对多
多对多
表和表之间如何建立关系?
通过一个单独的字段指向另外一个表的主键,这个单独的字段称为外键.
关联查询
同时查询多张存在关联关系的表时,使用的查询查询方式称为关联查询
关联查询的方式有三种: 1. 等值连接  2.内连接  3. 外连接
关联查询之等值连接
格式: select * from A,B where A.x=B.x(关联关系) and A.age>30;
查询工资高于2000的员工姓名/工资和工作地点(部门地点)
select ename,sal,loc
from emp e,dept d
where e.deptno=d.deptno and e.sal>2000;
关联查询之内连接
和等值连接作用一样, 查询的是两张表的交集数据
格式: select * from A,B where A.x=B.x(关联关系) and A.age>30;
格式: select * from A join B on A.x=B.x(关联关系)  where A.age>30;
查询1号部门每一个员工的姓名和对应的部门名
select ename,dname
from emp e join dept d
on e.deptno = d.deptno
where e.deptno=1;
关联查询之外连接
查询的是一张表的全部和另外一张表的交集
insert into emp (empno,ename) values(100,'Tom');
格式: select * from A left/right join B on A.x=B.x(关联关系)  where A.age>30;
查询所有员工的名字和对应的部门名
select e.ename,d.dname
from emp e left join dept d
on e.deptno=d.deptno;
关联查询总结:
1. 如果查询的是两张表的交集数据使用等值连接或内连接(推荐)
2. 如果查询的是一张表的全部和另外一张表的交集则使用外连接
JDBC
- Java DataBase Connectivity: java数据库连接
- 学习JDBC主要学习的就是如何通过java代码执行SQL语句
- JDBC实际上是Sun公司定义的一套用户和各种数据库软件进行连接的API(Application Programma Interface应用程序编程接口)
- 为什么使用JDBC, 如果没有JDBC Java程序员连接每一种数据库都需要学习一套全新的方法, Sun公司为了避免出现这种情况 定义出了一套JDBC接口里面是一堆方法的声明,各个数据库厂商根据此接口里面的方法声明写各自的实现类(驱动),这样Java程序员只需要掌握JDBC接口中方法调用 即可访问任何数据库.
如何使用JDBC
1. 创建一个maven工程  
2. 把MySQL相关jar包的坐标信息写到pom.xml文件中

   ```xml
   <!-- 连接MySQL数据库的依赖 -->
   <dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
       <version>8.0.15</version>
   </dependency>
   ```
3. 创建Demo01.java

   ```java
   //1.注册驱动 告诉编译器使用的数据库是什么
   Class.forName("com.mysql.cj.jdbc.Driver");
   //2.获取连接对象
   Connection conn =
           DriverManager.getConnection("jdbc:mysql://localhost:3306/newdb3?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true",
                   "root","root");
   System.out.println(conn);
   //3.创建SQL执行对象
   Statement s = conn.createStatement();
   //4.执行SQL语句
   String sql = "create table jdbct1(name varchar(10),age int)";
   s.execute(sql);
   System.out.println("创建完成!");
   //5.关闭资源
   conn.close();
   ```
Statement执行SQL语句的对象
- execute(sql);  可以执行任何SQL语句 但是推荐执行DDL(数据库相关和表相关SQL语句)
- executeUpdate(sql); 执行增删改相关的SQL语句  
- executeQuery(sql);  执行查询相关的SQL语句 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值