数据库基础操作 SQL

数据库的SQL

1.创建数据库
create database 数据库名称;

2.显示所有数据库
show databases;

3.使用某数据库
use 数据库的名称;

4.删除数据库
drop database 数据库名称;


表结构的SQL

1.创建新表
create table 表名(
    字段1 字段类型(长度) 约束,
    字段2 字段类型(长度) 约束
);

2.字段的类型
    varchar  char  int  biging  double  date  time  datetime  timestamp

3.删除表结构
    drop table 表名称;

4.查看表结构
    show tables;  desc 表名称;

5.修改表结构
    alter table 表名称 add 字段 类型(长度) 约束;
    alter table 表名称 modify 字段 类型(长度) 约束;
    alter table 表名称 drop 字段;
    alter table 表名称 change 旧字段 新字段 类型(长度) 约束;
    rename table 旧表名 to 新表名;

数据的SQL

1.添加    insert into 表名 (字段1) values (值1);
2.修改    update 表名 set 字段=值,字段=值 where 条件
3.删除    delete from 表名 where 条件

数据的查询

1.select * | 字段 from 表 where 条件 (> in like '小%') order by 排序

2.聚集函数
    count()
    sum()
    avg()
    max()
    min() 3.分组查询
    分组的含义
    group by 分组  可以使用having 关键字  4.总结:select ... from ... where ... group by ... having ... order by  


主键约束(主键只能是int或bigint)

1.使用primary key 
2.特点
    * 唯一
    * 非空
    * 被引用

3.自动增长
    * 把id字段声明成主键,使用自动增长,那么id的类型只能是int 或者bigint !!!
    * auto_increment

外键约束

1.保证数据的完整性。
2.使用foreign key 字段 references 表 (主键);

MySQL数据库的设计

一对多
    * 例子:一个班级可以有多个学生,一个学生只能属于一个班级。一个部门下有多个员工。
    * 建表原则:在多方表中,新创建一个字段,作为该表的外键,指向一方表的主键。

多对多
    * 例子:一个学生可以选择多门课程,一门课程可以被多个学生选择。
    * 建表原则:创建一个中间表,至少有两个字段,作为当前表的外键,指向原来多方表的主键。

一对一
    * 开发中一对一基本没用。
    * 例子:一个公司对应一个地址。一对一的关系完全可以把地址设计一张表。


多表的查询

1.笛卡尔积:
表1          表2
a1 a11      b1 b11
a2 a22      b2 b22
            b3 b33

* 编写SQL语句
    * select * from 表1,表2   ,产生的结果叫笛卡尔积

* 结果
    a1 a11 b1 b11
    a1 a11 b2 b22
    a1 a11 b3 b33
    a2 a22 b1 b11
    a2 a22 b2 b22
    a2 a22 b3 b33

* 笛卡尔积:就是两张表结果的乘积(不准确的)
*  select * from emp,dept;  笛卡尔积结果是不准确。


多表查询

1.内连接
    * 普通内连接
         select * from 表1 inner join 表2 on 条件(表1和表2有关联)
         select * from emp inner join dept on emp.dno = dept.did;

    * 隐式内连接(经常使用)
         select * from 表1,表2 where 条件
         select * from emp,dept where emp.dno = dept.did;
         select * from emp e,dept d where e.dno = d.did;

    * 查询是的select * 代表:两张表所有的字段。
         select e.ename,d.dname from emp e,dept d where e.dno = d.did;

2.外链接
     左外链接
        * select * from 表1 left outer join 表2 on 条件
        * select * from emp left outer join dept on emp.dno = dept.did;
     右外链接
        * select * from 表1 right outer join 表2 on 条件
        * select * from emp right outer join dept on emp.dno = dept.did;


内连接与外连接查询结果的区别

1.添加数据
     insert into dept values (null,'牛宝宝部');
     insert into dept values (null,'扯蛋部');

     insert into emp values (null,'冠西',100,null);
     insert into emp values (null,'柏芝',200,null);

2.测试
     select * from emp e,dept d where e.dno = d.did;                       -- 结果数据都是有关联
     select * from emp left outer join dept on emp.dno = dept.did;         -- 查询是左表中所有的数据和有关联数据
     select * from emp right outer join dept on emp.dno = dept.did;            -- 查询结果是把右表中所有的数据和有关联数据

练习

* 查看聪聪所属的部门名称和员工名称?
    * 查询:部门名称和员工名称
    * 表:两张表(先把条件写出来)
    * 条件:名称是聪聪
    * select d.dname,e.ename from emp e,dept d where e.dno = d.did and e.ename = '聪聪';

* 统计每个部门的人数(按照部门名称统计)
    * 查询:部门名称和部门人数
    * 表:两张表
    * 条件:内连接条件 group by 
    * select d.dname,count(*) from emp e,dept d where e.dno = d.did group by d.did;

* 统计部门的平均工资(按部门名称统计)
    * select d.dname,avg(e.sal) from emp e,dept d where e.dno = d.did group by d.did
    原文作者:数据库基础
    原文地址: https://my.oschina.net/cuncaojin/blog/415599
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞