本帖最后由 小石姐姐 于 2018-1-12 10:35 编辑
数据库第一天(基础SQL语句)
数据库分类:常用前两个
MYSQL:数据库,开源免费
Oracle:收费大型数据库收购了Sun
DB2:银行
SQLServer:
SyBace:
SQLite:
类--表
列--类字段,成员变量
表中的每行数据---对象
启动一下这三条指令要用用管理员身份,在任务栏右击任务管理器
scrvices.mse回车
启动:net start mysql
停止:net stop mysql
mysql -uroot -p123456
DDL定义语言
DML操作语言
DCL控制语言
DQL查询语言
SQL语句不区分大小写,建议关键字大写,自定义的用小写
一条SQL可以单行或者多行,结尾以分号结尾;
字符串和日期用单引号,一定要用,要不然会错!
注释用/**/多行
-- 是单行注释或者#也是单行
SQL通用语法
可变字符型:
int 整型 double 浮点数 date 日期类型 格式"yyyy-MM-dd"
varchar 字符串型,存储空间可变,可自动调整,效率低些
char 存储空间不可变字符串型,不能开辟储存空间,效率高,可能会浪费空间
creat database 数据库名;
show database;
drop database abc;
show databases;
* 约束:
* constraint
* 作用: 就是对列中记录的值进行限制, 如果插入的数据不符合约束规则, 则该操作会被立刻终止
* 扩展:
* 约束的种类:
* **主键约束**: `PRIMARY KEY`, 限制该列的记录值不能为空且唯一(不能重复), 相当于同时设定了`NOT NULL`和`UNIQUE`
* **自增约束**: `AUTO_INCREMENT`, 设置该列的记录值可以自动增加
* 默认从几开始? 1
* 能用于什么类型? 只能用于数字类型(如INT, DOUBLE, 小数1.23自增后是2)
* 外键约束: `FOREIGN KEY`, 主要是连接另一个表的主键
* 非空约束: `NOT NULL`, 限制该列的记录值不能为空
* 唯一约束: `UNIQUE`, 唯一, 限制该列的记录值不能重复
* 检查约束: `CHECK (条件)`, 限制该列插入的记录值是否符合要求
* 默认值约束: `DEFAULT 值`, 限制该列记录如果没有插入值, 则使用默认值
CREATE TABLE 表名 (
列名 数据类型(长度) 约束,
列名2 数据类型(长度) 约束,
...
列名n 数据类型(长度) 约束
);
// VARCHAR和CHAR一般需要手动指定长度, 日期数字等其他类型有默认长度一般不需要指定
* 列出当前数据库的所有表
* `SHOW TABLES;`
* 查看表的结构
* `DESC 表名;`: desc=description描述
* 删除表
* `DROP TABLE 表名;`
* 修改表的结构
* 格式: `ALTER TABLE 表名 操作关键字 列名 数据类型 约束;`
* 操作关键字
* `ADD`: 增加列.
* `ALTER TABLE 表名 ADD 新列名 数据类型 约束;`
* `MODIFY`: 修改指定列的数据类型和约束(不能修改列名).
* `ALTER TABLE 表名 MODIFY 要修改的列名 新数据类型 新约束;`
* `CHANGE`: 修改指定列的列名+数据类型+约束.
* `ALTER TABLE 表名 CHANGE 旧列名 新列名 新数据类型 新约束;`
* `DROP`: 删除列.
* `ALTER TABLE 表名 DROP 列名;`
* 修改表名
* 格式: `RENAME TABLE 旧表名 TO 新表名;`
添加数据格式,不考虑主键
格式:
1.insert into 表名 (列名) values (值)
2.insert into 表名 (列名) values (全列值)
* 插入记录格式2: 不指定主键, 让其自增
* 当设置了主键自增后, 插入记录时可以不考虑主键字段的值. 即字段名和值都没有主键这一列. 同时可以避免产生主键重复的错误
* 该方式适用于设置了主键自增(AUTO_INCREMENT)的情况
```sql
INSERT INTO 表名
(非自增列名1, 非自增列名2, ..., 非自增列名n)
VALUES
(值1, 值2, ..., 值n);
```
* 插入记录格式3: 不指定列名, 给所有列添加值
* 不指定列名, 为所有列添加值
* 该方式适用于为所有列添加值, 可以省去写列名. 但**不能省略主键**
```sql
INSERT INTO 表名
VALUES
(值1, 值2,...,值n);
```
*4: 批量插入记录:
* 适用于批量插入记录
```sql
INSERT INTO 表名
(列1, 列2)
VALUES
(记录1值1, 记录1值2),
(记录2值1, 记录2值2);
INSERT INTO 表名
VALUES
(记录1值1, 记录1值2),
(记录2值1, 记录2值2);
* 条件查询:
* 即按指定条件查询记录返回符合条件的结果集, 使用`SELECT`和`WHERE`组合
* `WHERE`:
* 作用: 条件子句, 过滤符合条件的结果
* 运算符
* 比较运算符
* `=`: 相等
* `<>`或`!=`: 不等
* `>`: 大于
* `<`: 小于
* `>=`: 大于等于
* `<=`: 小于等于
* `BETWEEN...AND...`: 在一个范围内(包含头和尾), `BETWEEN 0 AND 10;` 0~10
* 如:
* `IN ()`: 在列表中, 满足列表中一个即可
* 如: `IN (1, 3, 5)`
* `IS NULL`: 是空
* `LIKE 通配符`: 模糊查询
* 通配符种类
* `%`: 一个百分号可以表示任意个字符. 比如`王%`, `王大锤`, `王五`
* `_`: 一个下划线可以表示一个字符. 比如`王_`, 只能匹配`王五`
* 逻辑运算符
* `AND`: 与. 两边条件同时成立才成立
* `OR`: 或. 两边条件只要有一个成立就成立
* `NOT`: 非, 取相反结果
* `NOT BETWEEN ... AND ...`: 不在范围内
* `NOT IN`: 不在列表中
* `NOT LIKE`: 不匹配
* `IS NOT NULL`: 非空
* 日期也是可以比较的
ALTER TABLE test ADD COLUMN c INT NOT NULL FIRST
数据库第二天(高级SQL语句与JDBC)
order by [desc] [asc]降序或者升序排列
使用聚合函数查询计算
count 求和,对表中单位数据的个数求和,count(列名)
-- 查询统计账务表中一共多少条数据
注意:函数和括号中间不能有空格!!!!
SELECT COUNT (*) AS 'count' FROM zhangwu;
-- sum 求和函数,对以列中的函数求和计算sum(列名)
-- 对账务表查询,对所有金额求和计算
SELECT SUM(zmoney) FROM zhangwu;
-- 求和,统计所有支出的金额
SELECT SUM(zmoney) FROM zhangwu WHERE zname LIKE '%支出%';
INSERT INTO zhangwu(zname) VALUES ('彩票支出');
DELETE FROM zhangwu WHERE zname='彩票';
-- max 函数,对某列数据获取最大值
SELECT MAX(zmoney) FROM zhangwu;
-- avg 函数,计算一个列的所有数据的平均值
SELECT AVG(zmoney) FROM zhangwu;
分组查询:
group by 被分组的列名必须跟随聚合函数
select 查询的时候,被分组的列,要出现在select选择列的后面
-- 对zname内容进行分组查询求和,但是只是要支出
SELECT SUM(zmoney)AS 'getsum',zname FROM zhangwu WHERE zname LIKE '%支出%'
GROUP BY zname
ORDER BY 'getsum' DESC;
-- 对zname内容进行分组查询求和,但是只要支出,显示金额大于5000
-- 结果集是分组查询后,再次进行筛选,不能使用where,分组后再次过滤用having
SELECT SUM(zmoney) AS 'getsum',zname FROM zhangwu WHERE zname LIKE '%支出%'
GROUP BY zname HAVING getsum>5000;
注意:分组和排序都要放在查询的后面
**having与where的区别
having是分组以后进行过滤
where是分组前对数据进行过滤
having后面可以用分组函数
where后面不可以使用分组函数
select,from---where---group by---having---order by
SELECT SUM(zmoney) AS 'getsum',zname FROM zhangwu WHERE zname LIKE'%支出%'
-- 先分组,有条件加having
GROUP BY zname HAVING getsum>5000
-- 后排序
ORDER BY getsum DESC;
* 注意:
* 聚合函数与分组的使用效果
* 使用聚合函数后再进行分组, 才相当于汇总统计
* `SELECT zname, SUM(zmoney) FROM zhangwu GROUP BY zname;`
* 不使用聚合函数的分组, 只有第一条记录的值
* `SELECT zname, zmoney FROM zhangwu GROUP BY zname;`
* `HAVING`和`WHERE`的区别
* 过滤时机不同
* WHERE是在分组前先对查询结果进行过滤
* HAVING是在查询结果分组后再次过滤
* 是否可跟随聚合函数不同
* WHERE条件中不可使用聚合函数
* HAVING条件中可以使用聚合函数
* 条件可用列名不同
* HAVING条件中的列名必须是SELECT或GROUP BY中使用过的列名
* WHERE条件中可以使用表的所有列名
JDBC开发的步骤
1.注册驱动---固定步骤
告知JVM使用的是那个数据库的驱动
2.获得连接---固定步骤
使用JDBC中的类,完成对MYSQL数据库的连接
3.获得语句执行平台---固定步骤
通过连接对象获取对SQL的执行者对象
4.执行SQL语句
使用执行者对象,向数据库执行SQL语句
获取到数据库的执行后的结果
5.处理结果
6.释放资源---固定步骤
调用一堆close()
|
|