• 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;
  • 相关阅读:
    Python 自省指南(原文http://www.ibm.com/developerworks/cn/linux/l-pyint/#ibm-pcon)
    PyDev for Eclipse 简介
    (转)盘点前 10 名的免费跨浏览器测试工具
    使用 JMeter 完成常用的压力测试
    Python 单元测试框架 —— PyUnit
    runtime实现对象存储型数据库——LHDB
    从零实现一个基于UDP的iOS聊天程序(一)-- GCDAsyncUdpSocket源码解析
    hadoop实战随笔_070818
    hadoop实战笔记_170816
    hadoop实战随笔_170814
  • 原文地址:https://www.cnblogs.com/lyle-liu/p/13654928.html
Copyright © 2020-2023  润新知