数据库相关知识
2017-08-23 11:50
197 查看
数据库相关知识
Sql语句结构化查询语句,非过程性语言。
Sql分类
数据定义语句 | 数据处理语句 | 数据控制语句 | 数据查询语句 |
| | | |
创建 CREATE DATABASE test CHARACTER SET utf8 COLLATE utf8_bin;
查询数据库 SHOW databases;
SHOW CREATE DATABASE test
删除数据库:drop database test;
修改数据库:alter database test character set gbk;
使用数据库:use test;
powerDesigner数据库表关系设置
对表的操作(CRUD)
创建班级表语句:
create table class
(
class_id integer(32) not null,
class_Name varchar(32),
calss_SDate bigint(32),
primary key (class_id)
);
建表约束:(单表约束)---为了保证数据完整性.
* 主键约束 :primary key.可以唯一确定表中一条记录的字段.(非空唯一).主键是整形可以使用auto_increment.
* 唯一约束 :unique.创建表中这个字段的时候,这个字段不允许出现重复的值.
* 非空约束 :not null.代表创建表中的这个字段的时候,不可以向这个字段插入空值.
查看表:show tables;
desc class; 查看具体的表结构
修改表:
* alter table 表名 add字段名 类型(长度)约束;
---修改表添加字段.
* alter table 表名 modify字段名 类型(长度)约束;
---修改表修改字段的类型长度和约束.
* alter table 表名 drop字段名; ---修改表删除表中这个字段.
* alter table 表名 change旧的字段名 新的字段名 类型(长度)约束;
---修改表修改字段名
* rename table 旧表名 to新表名; ---修改表名.
* alter table 表名 character set字符集; ---修改表的字符集.
删除表:
drop table class ;
对表数据的(CRUD)
插入数据
INSERT INTO class (class_id , class_Name , calss_SDate) VALUES(1,'一班','20170820')
INSERT INTO class (class_id , class_Name , calss_SDate) VALUES(2,'二班','20140820');
INSERT INTO class (class_id , class_Name , calss_SDate) VALUES(3,'三班','20150820');
INSERT INTO class (class_id , class_Name , calss_SDate) VALUES(4,'四班','20160820');
修改记录
UPDATE class SET class_Name='17级1班' WHERE class_id = 1;
UPDATE class SET class_Name='14级2班' WHERE class_id = 2;
UPDATE class SET class_Name='15级3班' WHERE class_id = 3;
UPDATE class SET class_Name='17级2班' , calss_SDate='20170820' WHERE class_id = 4;
删除记录
DELETE FROM class WHERE class_id=2;
查询记录
SELECT * FROM class WHERE class_id=3
SELECT DISTINCT * FROM class (去重复字段查询)
SELECT class_Name AS className FROM class c WHERE c.class_id=3(取别名查询)
条件查询之条件表达式
where子句后的运算符:
* > ,< ,>= ,<= ,= ,<>
* in :一组值.
* like :模糊查询.
* 使用占位符: _和%。
* _代表的是一个字符: where name like '张_';
* %代表的是任意个字符: where name like '张%';
* 张% :以张开头.
* %张 :以张结尾.
* %张%:包含张即可.
* is null
* and , or ,not
SELECT * FROM class WHERE class_name LIKE '%17%'
SELECT * FROM class WHERE class_id IN(1,3)
SELECT * FROM class WHERE calss_SDate < '20170820'
SELECT * FROM class WHERE class_name LIKE '%17%' AND class_id IN (1,3)
查询并排序
SELECT * FROM class WHERE class_id IN (1,4) ORDER BY class_id desc
Asc表顺序,desc表逆序
聚集函数
Coun()计算数据总条数
SELECT COUNT(*) FROM class
Sum() 求和
SELECT SUM(class_id) FROM class WHERE class_name LIKE '%17%'
Avg()平均
SELECT AVG (class_id) FROM class WHERE class_name LIKE '%17%'
Max()总数
SELECT MAX(class_id) FROM class
Min()最小
SELECT MIN(class_id) FROM class
分组统计
* select * from 表 where条件
group by列名;
SELECT SUM(class_id) ,calss_SDate FROM class WHERE class_id IN(1,3,4) GROUP BY calss_SDate
多表关联查询
创建班级、学生、老师、科目表
drop table if exists class; /*==============================================================*/ /* Table: class */ /*==============================================================*/ create table class ( class_id integer(32) not null, class_Name varchar(32), calss_SDate bigint(32), primary key (class_id) ); |
drop table if exists student; /*==============================================================*/ /* Table: student */ /*==============================================================*/ create table student ( stu_id integer(32) not null, class_id integer(32), stu_name varchar(64), stu_sex bit, stu_age integer(6), stu_year year(4), primary key (stu_id) ); alter table student add constraint FK_Reference_3 foreign key (class_id) references class (class_id) on delete restrict on update restrict; |
drop table if exists teacher; /*==============================================================*/ /* Table: teacher */ /*==============================================================*/ create table teacher ( teacher_id integer(32) not null, techer_name varchar(32), teach_id integer(32), teacher_age integer(3), primary key (teacher_id) ); alter table teacher add constraint FK_Reference_2 foreign key (teach_id) references course (cou_id) on delete restrict on update restrict; |
drop table if exists course; /*==============================================================*/ /* Table: course */ /*==============================================================*/ create table course ( cou_id integer(32) not null, cou_name varchar(16), primary key (cou_id) ); |
drop table if exists teacherAndClass; /*==============================================================*/ /* Table: teacherAndClass */ /*==============================================================*/ create table teacherAndClass ( teacher_id integer(32) not null, class_id integer(32) not null, ischief bit, primary key (teacher_id, class_id) ); alter table teacherAndClass add constraint FK_Reference_4 foreign key (class_id) references class (class_id) on delete restrict on update restrict; alter table teacherAndClass add constraint FK_Reference_5 foreign key (teacher_id) references teacher (teacher_id) on delete restrict on update restrict; |
一对一的关系
一个班级只能有一个班主任,在班级的一方设置一个唯一的外键关联一名老师,且一名老师也只能是一个班级的班主任。
一对一的建表原则:
* 唯一外键对应:
* 假设一对一的双方任意一方是多.(假设为一对多).需要在多的一方创建外键指向一的一方的主键.但同时将这个外键设置为唯一的unique.
* 主键对应:
* 在任意的一方的主键上添加一个外键约束.指向另一方的主键.
一对多的关系
一个班级有多个学生,一个科目有多个老师,这些都是一对多的关系
建表原则:
多表之间约束:(约束:保证数据的完整性)
* 外键约束:
* alter table employee add foreign key(dno) references dept(did);
***** 一对多的建表原则:
* 在多的一方创建一个字段,作为外键指向一的一方的主键.
多对多的关系
一个老师可以教多个班级、一个班级可以有多个老师。
创建一个中间表:(第三张表),中间表中需要有两个字段.分别作为外键指向多对多双方的主键.
对表的联合查询
笛卡尔积查询
Select * from student , class
内连接查询
查询两个表的交集,只包含来自两张表的连接字段相等的记录。
显示内连接:SELECT * FROM student stu INNER JOIN class cl ON (stu.class_id = cl.class_id)
隐式内连接:
9532
Select * from student stu ,class cl where stu.class_id =cl.class_id
左外连接
查询结果:是左边表的全部以及两个表的交集。
Select * from student stu ,class cl where stu.class_id =cl.class_id
右外连接
查询结果:右边表的全部以及两个表的交集
SELECT * FROM student stu RIGHT JOIN class cl ON (stu.class_id = cl.class_id)
子查询
指的是一条语句的查询结果需要依赖另一条语句的查询结果。
查询某班主任老师名下的同学。
//通过该名称查询老师id
SELECT teacher_id FROM teacher WHERE techer_name = '四老师'
//查询班级id信息
SELECT class_id FROM class WHERE teacher_id =(SELECT teacher_id FROM teacher WHERE techer_name = '四老师')
//查询同学信息通过班级id
SELECT * FROM student WHERE class_id = (SELECT class_id FROM class WHERE teacher_id =(SELECT teacher_id FROM teacher WHERE techer_name = '四老师'))
补充信息:
限制查询数量:
SELECT * FROM student LIMIT 5;
BETWEEN 操作符选取介于两个值之间的数据范围内的值
查询年龄22-23的学生
SELECT * FROM student WHERE stu_age BETWEEN 22 AND 23
相关文章推荐
- LeetCode数据库题解&&sql相关知识总结
- SQL Server 2005数据库的排序规则相关知识介绍
- 数据库的相关知识
- 各数据库相关文件(*.sql,*.mdb,*.myd,*.bak等)知识
- 程序员面试笔试宝典学习记录(三)(数据库相关知识)
- 电商之梳理JDBC相关知识---数据库连接语言
- 数据库基础教程(3):相关理论知识
- 简述SQL Server 2005数据库镜像相关知识
- 黑马程序员之SQL学习笔记: 数据库相关知识 小总结
- 数据库原理相关知识
- SQL Server 2005数据库的排序规则相关知识
- 数据库相关知识及tortoise
- 数据库相关知识
- 数据库相关知识基础
- 高并发系统中,数据库相关知识
- 数据库压力测试相关知识,测试关键指标参数(tps,qps等)
- sql server 2005 数据库相关知识
- 数据库相关知识
- 数据库,SQL等相关知识总结
- 数据库相关知识整理