SQL基本知识


1.数据库结构:
    以mysql为例,mysql服务器里面可以有多个数据库,一个数据库里面可以有多张表;
    一般而言,一个系统(软件,项目)就设计一个数据库,一个数据库里面设计多张表,每一张表对应一个实体类;
    
2.什么是SQL?
    Structure Query Language(结构化查询语言),通过SQL语句可以操作数据库。
    SQL在windows中不区分大小写;
    
3.操作数据库:
    -- 创建数据库 create database 数据库名 [character set 字符集][collate  校对规则] 
        create database mywork CHARACTER set utf8;

        -- 查看数据库
        SHOW DATABASES;
        SHOW CREATE DATABASE mywork;

        -- 删除数据库 drop database 数据库名;
        DROP DATABASE mywork;

        -- 修改数据库 alter database 数据库名 character set 字符集;
        ALTER DATABASE mywork CHARACTER set utf8;
        
        -- 选中数据库 use 数据库名;
        use mywork;

        -- 查看正在使用的数据库 select database();
        select database();
                
4.操作数据表:

    说明:可变长度  varchar(n) eg:varchar(20), 最大能存放20个字符.  ‘aaa’, 占3个字符的空间
    日期
        - DATE     只有日期(年月日)
        - DATETIME 日期和时间(年月日时分秒)
        - TimeStamp 时间戳
        
    约束:
        not null: 非空 ;  eg:  username varchar(40)  not null  username这个列不能有null值
        unique:唯一约束, 后面的数据不能和前面重复;  eg: cardNo char(18) unique;  cardNo 列里面不可以有重复数据
        primary key;主键约束(非空+唯一);    一般用在表的id列上面. 
        
    注意:
        1. 先设置了primary key 才能设置auto_increment
        2. 只有当设置了auto_increment 才可以插入null 数据库自动增加值维护id
                
    1.创建数据表:
        create table student(
            id int primary key auto_increment,
            name varchar(40),
            sex  varchar(8),
            age  int
        );
    
    2.查看表:
        1.查看当前数据库中的所有表:
            show tables;
        2.查看某张数据表的结构:例如:查看表 student
            desc student;
    
    3.修改表
        1.在表中增加一列:例如:在表student增加列名address
            alter table student add address varchar(40) not null;
            
        2.修改列的类型约束:
            alter table student modify sex varchar(10);
            
        3.修改列的名称,类型,约束:修改表student中列名address为s_address,类型为varchar(20)
            alter table student change address s_address varchar(20);
            
        4.删除列:
            alter table student drop s_address;
            
        5.修改表名
            rename table student to teacher;

SQL基本知识:
    1.表与表之间的关系处理:
        一对多:在多的一方创建一个列作为外键,指向一方主键;
        多对多:新建一张中间表,至少包含两个列,都作为外键,分别指向各自的主键;
        一对一:先当做一对多,在外键字段添加唯一约束;
        
        外键添加的语法:
            alter table 表 add foreign key(列[外键]) references 表(列[主键])
            例如:alter table score add foreign key(sid1) references student(sid)
            
    2.sql的连接查询:
        1.内连接查询:
            select * from a inner join b on 连接条件 [where 其它条件]
            例如:SELECT * from t_category c INNER JOIN t_product p ON c.cid = p.cno;
            
        2.外连接查询:
            select * from a left outer join b on 条件
            例如:SELECT * FROM t_category c LEFT OUTER JOIN t_product p ON c.cid = p.cno
            
        内连接查询与外连接查询的区别:
            - 内连接: 查询的是两个表的公共部分,满足连接条件的部分
            - 左外连接: 以左边表为主表, 查询出左边表的所有的数据. 再通过连接条件匹配出右边表的数据, 如果满足连接条件, 
            展示右边表的数据; 如果不满足, 右边的数据通过null代替;
    
    3.子查询:
        1.子查询的结果是一个值的情况:
            子查询结果是单行单列,肯定在WHERE后面作为条件,父查询使用:比较运算符,如:> 、<、<>、= 等
            SELECT * FROM 表 WHERE 列 =(子查询);
            例如: select * from product where cno =  (SELECT cid FROM category where cname ='手机数码');
        2.子查询的结果是单列多行的情况:
            子查询结果是单例多行,结果集类似于一个数组,父查询使用IN运算符;
            SELECT * FROM 表 WHERE 列 in (子查询);
            例如:SELECT * FROM t_product WHERE cno in (SELECT cid FROM t_category WHERE cname in('手机数码','食物'));
        3.子查询的结果是多行多列的情况:
            子查询结果是多行多列,肯定在FROM后面作为表; 子查询作为表需要取别名,否则这张表没有名称则无法访问表中的字段;
            例如:
                SELECT MAX(c1.price) from (SELECT * FROM product where cno = 1) as c1;

 

posted @ 2020-09-11 22:59  moonlighter  阅读(223)  评论(0编辑  收藏  举报