数据库相关知识

来源:互联网 发布:刘意 java视频 编辑:程序博客网 时间:2024/06/05 19:45

数据库相关知识

Sql语句

结构化查询语句,非过程性语言。

Sql分类

数据定义语句

数据处理语句

数据控制语句

数据查询语句

 

 

 

 

对数据库的操作(CRUD

创建 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='171' WHERE class_id = 1;

UPDATE class SET class_Name='142' WHERE class_id = 2;

UPDATE class SET class_Name='153' WHERE class_id = 3;

UPDATE class SET class_Name='172' , 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)

隐式内连接:

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

原创粉丝点击