title | tags | grammar_cjkRuby |
---|---|---|
JavaWeb基础第三天 |
sql,jdbc |
true |
[TOC]
- 数据定义语言:简称DDL(Data Definition Language),用来定义数据库对象:数据库,表,列等。关键字:create,alter,drop等
- 数据操作语言:简称DML(Data Manipulation Language),用来对数据库中表的记录进行更新。关键字:insert,delete,update等
- 数据控制语言:简称DCL(Data Control Language),用来定义数据库的访问权限和安全级别,及创建用户。
- 数据查询语言:简称DQL(Data Query Language),用来查询数据库中表的记录。关键字:select,from,where等
- 创建数据库 create database 库名 或者 create database 库名 character set 编码
- 查看编码show create database 库名
- 删除数据库drop database 库名
- 使用数据库 use 库名
- 查看当前操作的库 select databases
- 数据库中表中的数据类型
分类 | 类型名称 | 说明 |
---|---|---|
整数类型 | tinyInt | 很小的整数 |
smallint | 小的整数 | |
mediumint | 中等大小的整数 | |
int(integer) | 普通大小的整数 | |
小数类型 | float | 单精度浮点数 |
double | 双精度浮点数 | |
decimal(m,d) | 压缩严格的定点数,m表示总位数,d表示小数点几位 | |
日期类型 | year | YYYY 1901~2155 |
time | HH:MM:SS -838:59:59~838:59:59 | |
date | YYYY-MM-DD 1000-01-01~9999-12-3 | |
datetime | YYYYMMDD HH:MM:SS 10000101 00:00:00~ 9999 | |
1231 23:59:59 | ||
timestamp | YYYYMMDD HH:MM:SS 1970 |
|
UTC~20380119 03:14:07UTC | ||
文本、二进制类型 | CHAR(M) | M为0~255之间的整数 |
VARCHAR(M) | M为0~65535之间的整数 | |
TINYBLOB | 允许长度0~255字节 | |
BLOB | 允许长度0~65535字节 | |
MEDIUMBLOB | 允许长度0~167772150字节 | |
LONGBLOB | 允许长度0~4294967295字节 | |
TINYTEXT | 允许长度0~255字节 | |
TEXT | 允许长度0~65535字节 | |
MEDIUMTEXT | 允许长度0~167772150字节 | |
LONGTEXT | 允许长度0~4294967295字节 | |
VARBINARY(M) | 允许长度0~M个字节的变长字节字符串 | |
BINARY(M) | 允许长度0~M个字节的定长字节字符串 |
类型 | 描述 |
---|---|
int | 整型 |
double | 浮点型 |
varchar | 字符型 |
date | 日期型 |
约束名称 | sql表示 | 说明 |
---|---|---|
主键约束 | primary key | 唯一性,非空性 |
唯一约束 | unique | 唯一性,可以空,但只能有一个 |
默认约束 | default | 该数据的默认值 |
自增长 | auto_increment | 一般用于主键自动增长 |
非空约束 | not null | 数据不能为空 |
- 创建表
create table 表名(
字段名 类型(长度) [约束],
字段名 类型(长度) [约束],
字段名 类型(长度) [约束]
);
- 查看当前数据库中的表** show tables**
- 查看表结构 desc 表名
- 修改表
- 添加一列 alter table 表名 add 字段名 类型(长度) [约束]
- 修该列的类型(长度,类型) alter table 表名modify 要修改的字段名 类型(长度) [约束]
- 修改列名 alter table 表名 change 旧列名 新列名 类型(长度) [约束]
- 删除表中的列 alter table 表名 drop 列名
- 修改表名 rename table 表名 to 新表名
- 修改表的字符集 alter table 表名 character set 编码
- 查看当前表结构show create table 表名
- 插入记录** insert into 表名(列名1,列名2,列名3……) values(值1,值2,值3……) 或者 insertinto 表名 values(值1,值2,值3……)**
- 插入记录中文乱码问题 set names gbk;
- 修改表记录 update 表名 set 字段名=值, 字段名=值, 字段名=值
- 修改表记录带条件 update 表名 set字段名=值, 字段名=值, 字段名=值…… where 条件
- 删除表记录带条件 delete from 表名 where 条件
- 删除表记录不带条件 delete from 表名; 或者 truncate table 表名;
- 查询所有
**select * from product;**
- 查询列
**select pname ,price from product;**
- 查询所有商品信息使用表别名:
**select * from product as p;**
- 查询商品使用列别名
**select pname as p from product**
- 查询去掉重复
**select distinct(price) from product;**
- 将所有的商品的价格+10进行显示
**select pname,price+10 from product;**
运算符分类 | 运算符表示 | 说明 |
---|---|---|
比较运算符 | < <= >= = <> | 大于、小于、大于(小于)等于、不等于 |
BETWEEN …AND… | 显示在某一区间的值(含头含尾) | |
IN(set) | 显示在in列表中的值,例:in(100,200) | |
LIKE 通配符 | 模糊查询,Like语句中有两个通配符:% 用来匹配多个字符;例first_name like ‘a%’;_ 用来匹配一个字符。例first_name like ‘a_’; | |
IS NULL | 判断是否为空 is null; 判断为空 is not null; 判断不为空 | |
逻辑运算符 | and | 多个条件同时成立 |
or | 多个条件任一成立 | |
not | 不成立,例:where not(salary>100); |
- 查询商品名称为洗衣机的商品信息 select * from product where pname='洗衣机';
- 查询价格>60的商品信息 ** select * from product where price > 60;**
- 查询名字中含有机的商品信息 select * from product where pname like '%机%'; 或者select * from product where pname like "%"'机'"%";
- 查询id在(3,6,9)范围的商品信息 select * from product where pid in (3,6,9);
- 查询商品名称中含有机并且id为6的商品信息 select * from product where pname like'%机%' and pid=6;
- 查询id为2或者6的商品信息 select * from product where pid=2 or pid=6;
- 按照商品价格(升序/降序 )select * from product order by price asc; , *select from product order by price desc;
- 查询名称含有器的并且按照价格降序排序 select * from product where pname like '%器%' order by price desc;
- 获取所有商品的价格总和 select sum(price) as 价格总和 from product;
- 获取所有商品的平均价格 select avg(price) as 平均价格 from product;
- 获取所有商品的个数 select count(1) as 总数量 from product;
- 根据pname字段分组,分组后统计商品的个数 select pname,count(*) from productgroup by pname;
- 根据pname分组,分组后统计商品的平均价格,并且平均价格>3000 select pname,avg(price) as avgprice from product group by pname having avgprice >3000 ;
select * from product limit a,b 其中 a 代表从第几条记录开始查询,如果a是5,那么记录的条数就是从6开始, b 代表一页显示几条
- 当显示的内容小于b的时候,sql不会发生错误,会正常显示剩余所有的条数
- select 一般在的后面的内容都是要查询的字段
- from 要查询到表
- where
- group by
- having 分组后带有条件只能使用having
- order by 它必须放到最后面
create table product (
pid int primary key auto_increment,
pname varchar(30) not null,
price int not null
);
insert into product values (null,'海尔洗衣机',3000);
insert into product values (null,'荣升电冰箱',1000);
insert into product values (null,'美的微波炉',3000);
insert into product values (null,'西门子洗衣机',3000);
insert into product values (null,'可可洗脚盆',300);
insert into product values (null,'手电筒',30);
insert into product values (null,'乖乖洗衣机',30000);
insert into product values (null,'格力空调',8999);
insert into product values (null,'微波炉',300);
insert into product values (null,'电视机',2000);
insert into product values (null,'微波炉',1000);
insert into product values (null,'美的烤箱',399);
insert into product values (null,'TCL电视',4500);
insert into product values (null,'格力空调',5000);
insert into product values (null,'联想笔记本',3111);
insert into product values (null,'西门子冰箱',6000);
insert into product values (null,'格力空调',8000);
insert into product values (null,'小米洗衣机',2500);
insert into product values (null,'便宜洗衣机',30);
insert into product values (null,'美的电饼铛',2500);
insert into product values (null,'美的电饼铛',2500);
insert into product values (null,'电冰箱',3230);
insert into product values (null,'海尔洗衣机',4000);
insert into product values (null,'格力电风扇',3000);
insert into product values (null,'美的电饭锅',9000);
insert into product values (null,'自动洗衣机',4000);
insert into product values (null,'小天鹅洗衣机',6000);
insert into product values (null,'格力变频空调',15000);
insert into product values (null,'小天鹅电风扇',300);
insert into product values (null,'大力洗衣机',20000);
insert into product values (null,'电风扇',300);
insert into product values (null,'美的冰箱',2000);
insert into product values (null,'买空调到格里',9000);
insert into product values (null,'乐视大空调',5);
insert into product values (null,'长虹电风扇',3000);
insert into product values (null,'九阳榨汁机',300);
insert into product values (null,'viov x9',2999);
insert into product values (null,'nb洗衣机',30000);
insert into product values (null,'死全家捕鼠器',888);
insert into product values (null,'九阳电饭煲',5200);
insert into product values (null,'美的空调',5555);insert into product values (null,'老板空调',19999);
insert into product values (null,'海尔液晶电视',30000);
insert into product values (null,'我的电饼铛',6666);
insert into product values (null,'大神洗衣机',500);
insert into product values (null,'魅族豆浆机',2000);
insert into product values (null,'吃饱饱电饭煲',3000);
insert into product values (null,'九阳豆浆机',1100);
insert into product values (null,'电风扇',10);
insert into product values (null,'飞科剃须刀',300);
insert into product values (null,'海尔电冰箱',2975);
insert into product values (null,'东风X-8洗衣机',11000);
insert into product values (null,'电风扇',10);
insert into product values (null,'三星电视机',9000);
insert into product values (null,'iphone10',30);
insert into product values (null,'志高空调',5000);
insert into product values (null,'所罗门冰箱',5000);
insert into product values (null,'爱疯打火机',666);
insert into product values (null,'战斗机',30000000);
insert into product values (null,'海氏(Hauswirt)多功能和面机打蛋器搅拌机',1600);
insert into product values (null,'Max电视机',5600);
insert into product values (null,'小飞鹅洗衣机',30000);
insert into product values (null,'终结者T100电冰箱',300000);
insert into product values (null,'奥斯克空调',4999);
insert into product values (null,'波波洗衣机',4999);
- 一对多
- 多对多
create table department (
id int primary key auto_increment,
name varchar(30) not null
);
create table staff(
id int primary key auto_increment,
name varchar(10) not null,
did int not null default 1
);
insert into department values (null,'开发部');
insert into department values (null,'教学部');
insert into department values (null,'网络部');
insert into department values (null,'运维部');
insert into department values (null,'市场部');
insert into staff values (null,'张三工程师',1);
insert into staff values (null,'李四老师',2);
insert into staff values (null,'王五装电脑',3);
insert into staff values (null,'可老师',2);
insert into staff values (null,'ss老师',2);
insert into staff values (null,'li老师',2);
insert into staff values (null,'lili网管',3);
insert into staff values (null,'lucy工程师',1);
insert into staff values (null,'pl',4);
select * from staff , department;
使用关键字inner join,inner可以省略
- 隐式内链接
select * from department d,staff s where d.id = did;
- 显式内链接
select * from department as d inner join staff as s on d.id = s.did;
关键字是outer join,outer可以省略,外连接要用on不能使用where
- 左外连接
select * from department d left join staff on d.id = did;
- 右外连接
lect * from department d right join staff on d.id = did
一个查询的结果作为另一个查询的条件
select * from staff where did = (select id from department where name ='教学部');
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的JavaAPI,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。是Java访问数据库的标准规范
- 在工程中导入jar包
- 注册驱动
Class.forName("com.mysql.jdbc.Driver");
- 获得连接
Connection con =DriverManager.getConnection(“jdbc:mysql://localhost:3306/mydb”,”root”,”root”);
如果是本机路径可以写为Connection con =DriverManager.getConnection(“jdbc:mysql:///mydb”,”root”,”root”);
- 获取执行平台
Statement stmt = con.createStatement();
- 执行sql语句
int num = stmt.executeUpdate(String sql);
或者ResultSet rs=stmt.executeQuery(String sql);
- 处理结果集
while( rs.next() ){
//方法参数为数据库表中的列名
String sid = rs.getString("pid");
//获取当前行的分类名称
String sname = rs.getString("pname");
}
- 释放资源
rs.close();
stmt.close();
con.close();