zoukankan      html  css  js  c++  java
  • 1.SQL数据定义语言(基础)

    1.创建数据库

    • CREATE Database database_name;
    • 习惯Sql语句中,保留的关键字否设置为大写,数据库、表、字段为小写。 

    2.创建数据表

    • 创建数据表基本语法
    • CREATE TABLE 表名(
            列名1  类型 [NOT NULL,UNIQUE,DEFAULT value,PRIMARY KEY,CONSTRAINT foregin_name     
            foregin key(column) references  outer_table_name(column) on Delete RESTRICT|CASCADE|SET NULL]
      );
    • 说明
    • 1.中括号中的内容为可选项目
    • 2.常用的列数据类型有 INT、SMALLINT、FLOAT、DATE、DATETIME、VARCHAR(n)、CHAR(n)等
    • 3.NOT NULL 设置值不能为NULL、UNIQUE设置值不能重复
    • 4.PRIMARY KEY设置为主键 只有外键可以设置为auto_increment
    • 5.CONSTRAINT外建名 references outer_table_name(列值) on Delete|Update RESTRICT|CASCADE|SET NULL] 设置外键 restrict主表中数据不能删除数据、CASCADE主表中被删除那么引用为外键值对的表格也删除、主表中的数据被删除那么引用为外键的表的数据设置为NULL
    • 举例--mysql测试
    • 1.student表
      CREATE TABLE student(
             SNO CHAR(7) PRIMARY KEY,
             SNAME VARCHAR(8) NOT NULL,SEX CHAR(2) NOT NULL,
             BDATE DATE NOT NULL,
             HEIGHT DEC(5,2) DEFAULT 000.00); 
      
    • 2.SCOURSE表
    •  CREATE TABLE SCOURSE(
                CNO CHAR(6) PRIMARY KEY,
                LHOUR SMALLINT NOT NULL,
                CREDIT DEC(1,0) NOT NULL,
                SEMESTER CHAR(2) NOT NULL); 
    • 3.SC表---添加外键
    • CREATE TABLE sc(
             SNO CHAR(7) NOT NULL,
             constraint SNO_foregin_key foreign key(SNO) references student(SNO) ON delete cascade,
             CNO CHAR(7) not NULL,
             constraint cno_foreign_key foreign key(CNO) references scource(cno) on delete restrict,          
             grade dec(4,1) DEFAULT null);

    3.修改表的结构

    • a.添加新列------ADD
    • alter table_name add 列名 类型  
    • b.修改列字段类型----modify
    • alter table_name modify 列名 类型 
    • c.修改列的名称或者属性-----change
    • alter table_name change name1 name2 类型
    • d.添加主键------add primary key(column);
    • alter table_name add primary key(column); 
    • alter table table_name drop primary key;//删除主键 注意:如果此列被设置为外建 on delete restrict,那么只有删除了外键之后才能删除主键
    • e.添加其他属性-------add unique(column)
    • alter table_name add unique(column)
    • g.重命名表名--------rename
    • alter table_name rename table_name table_name_new
    • h.外键设置------外建引用的列值必须唯一
    • alter table_name add constrints foreign_name foreign key(column) references outer_table(column) on delete set null;
    • alter table_name drop foreign key foreign_name;//删除外键
    • 索引设置—后续
    • alter table_name add index index_name(column)
    • alter table_name drop index index_name;//删除索引

    4.MYSQL索引

    • MYSQL索引----加快查询速度
    • MySQL中,所有的数据类型都可以被索引。
    • MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引等。
    • 缺点:
    • 1.创建和维护索引需要消耗时间
    • 2.索引需要占用物理空间
    • 索引的分类
    • 普通索引— 没有任何约束条件的索引
    • 唯一索引— Unique(索引对应的值不能重复)
    • 全文索引—FullText(只能创建在CHAR、VARCHAR、TEXT)
    • 单列索引—索引对应一列值
    • 多列索引—索引对应多列值
    • 创建索引
    • 1.创建表的时候设置索引
    • 格式[UNIQUE | FULLTEXT | SPATIAL ] INDEX index_name (column [length长度] [ASC|DESC]);
        • a.普通索引 index index_name(id) 
          • create table score(id int(11) primary Key not null, index id_index(id));//这里其实是多余的,主键上自动会添加索引
        • b.唯一索引
          • unique index index_name (column desc);
        • c.全文索引
          • FullText index index)name(info desc);
        • d.单列索引
          • Index index_name(tel(20));//tel 为varchar类型
        • e.多列索引
          • Index index_name(column1,column2);
          • 多列索引生效的条件是什么?
          • 查询条件包含column1
          • eg:alter table table_name add index index_name(column1,column2);
          • select * from table_name where column2="value";//索引是不会起作用的
    • 2.已经创建的表格添加索引
        • create [Unique|FULLTEXT|SPATIAL] Index index_name on table_name(column  length desc);
        • e.g.:create unique Index id_index on studentInfo(id);//id字段添加了自动索引
    • 3.修改表的结构并添加索引
        • Alter table table_name add [unique|fulltext] index index_name(column desc);
    • 4.删除索引
        • ALTER Table table_name drop Index index_name;
    • 5.查看添加的索引
        • show create table table_name;

    5.SELECT语句

    •  5.1 表格数据

    • 表1.course表
    • 表2.student
    • 表3.sc
    • 5.2 查询语句联系

    • Q1:查询秋季学期有一门以上得分90以上的学生的名字
    • a.SELECT sname from student WHERE sno in (SELECT sno from sc WHERE grade>90 and cno in (SELECT cno from course WHERE semester="秋"));
    • b.SELECT sname  FROM student JOIN sc USING(`SNO`) JOIN course USING(cno) WHERE `SEMESTER`="秋" and grade>90;
    • Q2:查询只有一个人选修的课程号
    • a.SELECT cno from (SELECT cno,count(*) as count from sc GROUP BY `CNO`)a WHERE count=1;//from后的子查询必须添加别名
    • select CNO from sc group by CNO having count(*)=1;
    • b.SELECT `CNO` FROM sc WHERE cno not in (SELECT sc1.cno from sc as sc1,sc as sc2 WHERE sc1.sno!=sc2.`SNO` and sc1.cno=sc2.cno);
    • c.SELCT cno from sc as scx where cno not in (select cno from sc where sno!=scx.sno);//关联字查询
    • Q3:查询选修EE-1的学生的姓名
    • a.SELECT sname FROM student WHERE `SNO` IN (SELECT `SNO` from sc WHERE cno="EE-1");
    • b.select sname FROM student,sc WHERE student.`SNO`=sc.`SNO` and `CNO`="EE-1";//链接
    • c.SELECT `SNAME` FROM student  WHERE EXISTS (SELECT * from sc where sc.sno=student.`SNO`AND cno="EE-1");//使用Exists
    • Q4:查询学生的平均身高
    • SELECT AVG(`HEIGHT`) FROM student;
    • Q5:查询缺成绩的学生名和课程号
    • SELECT sname,cno FROM student JOIN sc USING(`SNO`) WHERE grade IS NULL;
    • 5.3 Group BY 和Order by的使用

    • Q1:查询CS开头的课程的平均成绩,最大成绩,最小成绩,除去成绩有NULL的科目,最终结果按照课程名进行排序
    • SELECT cno,MAX(grade),MIN(grade),avg(grade) FROM sc WHERE `CNO` LIKE "CS%" GROUP BY `CNO` HAVING `CNO` IN (SELECT `CNO` FROM sc WHERE grade is not NULL) ORDER BY `CNO` ASC;
    • 注意HAVING的条件
    • 5.4 Union的使用

    • 合并查询UNION—合并集合查询的结果(一般是同一列)
    • 关键字
        • 1.UNION       ——合并结果并去重
        • 2.UNION ALL——简单的合并结果
    • Q1:查询1983年出生的学生和选修EE专业的学生的学号
    •  SELECT sno from student WHERE year(`BDATE`)="1983" UNION SELECT `SNO` FROM sc WHERE cno like "EE%";

    6.Insert、update、Delete语句 

    • 6.1 Insert语句

    • Insert into table(column1,coliumn2) values(values1,values2);

    • 6.2 Update语句

    • update table_name set column=value where 条件 

    • 6.3 Delete语句 

    • delete from table_name where 条件  

  • 相关阅读:
    angular----关于注入HTML
    js ---- 时间格式
    JQuery的父、子、兄弟节点查找方法
    js中的时间与毫秒数互相转换
    $.each ---- 跳出当前的循环
    关于ng-model取不到值的问题
    IOS 物理引擎
    斯坦福 IOS讲义 课件总结 三
    斯坦福 IOS讲义 课件总结 二
    斯坦福 IOS讲义 课件总结 一
  • 原文地址:https://www.cnblogs.com/yangyunnb/p/6407044.html
Copyright © 2011-2022 走看看