• Mysql基础(一)


    0x01 sql基本概念

    基本表:

    • 本身独立存在的表
    • sql中一个关系就对应一个基本表
    • 一个(或多个)基本表对应一个存储文件
    • 一个表可以带若干索引

    视图:

    • 从一个或几个基本表导出的表
    • 数据库中只存放视图的定义而不存放视图对应的数据
    • 视图是一个虚表
    • 用户可以在视图上再定义视图

    0x02 基本表的定义

    sql的动词:

    SQL功能 动词
    数据查询 SELECT
    数据定义 CREATE、DROP、ALTER
    数据操纵 INSERT、UPDATE、DELETE
    数据控制 GRANT、REVOKE

    1、创建数据库

    create database st;
    


    2、创建student,course,sc表
    create table <表名>
    (<列名> <数据类型> [<列级完整性约束条件>],
    <列名> <数据类型> [<列级完整性约束条件>]
    );

    create table student
    (sno char(9) primary key,
    sname char(20),
    ssex char(2),
    sage smallint,
    sdept char(20)
    );
    
    create table course
    (cno char(4) primary key,
    cname char(40),
    cpno char(4),
    ccredit smallint,
    foreign key(cpno) references course(cno)
    );
    
    create table sc
    (sno char(9),
    cno char(4),
    grade smallint,
    primary key(sno,cno),
    foreign key(sno) references student(sno),
    foreign key(cno) references course(cno)
    );
    



    3、修改基本表
    alter table <表名>
    ①向student表中增加“入学时间”列,其数据类型为日期型。新增的一列均为空值。

    alter table student add s_sentrance date;
    



    ②将年龄的数据类型由字符型改为整型。

    alter table student modify sage int(20);
    


    ③修改表名

    alter table student rename to stu;
    


    ④删除表中字段

    alter table student drop column s_sentrance;
    

    4、删除基本表

    drop table student cascade;
    #cascade,删除基本表的同时,将相关的依赖对象一起删除。
    

    0x03数据查询

    查询语句:

    • select子句:指定要显示的属性列
    • from子句:指定查询对象(基本表或视图)
    • where子句:指定查询条件
    • group by子句:对查询结果按指定列的值分组,该属性列值相等的元组为一个组,通常会在每组中作用聚集函数。
    • having短语:只有满足指定条件的组才能予以输出。
    • order by子句:对查询结果表按指定列值的升序或降序排列。

    1、单表连接
    ①查询全体学生的学号与姓名

    select sno,sname from student;
    


    ②查询全体学生的姓名、学号、所在系

    select sname,sno,sdept from student;
    


    ③查询全系学生的详细记录

    select * from student;
    


    ④查询全体学生的姓名及出生年份

    select sname,2020-sage from student;
    


    ⑤查询全体学生的姓名、出生年月和所在的院系,用小写字母表示系名

    select sname,'year of birth:',2020-sage,lower(sdept) fromm student;
    


    ⑥查询选修了课程的学生学号

    select distinct sno from sc;
    #指定distinct关键字,去掉表中重复的行
    


    ⑦常用的查询条件

    查询条件 谓词
    比较 =,>,<,>=,<=,!=,<>,!>,!<,not+上述比较运算符
    确定范围 between and,not between and
    确定集合 in,not in
    字符匹配 like,not like
    空值 is null,is not null
    多重条件(逻辑运算) and,or,not

    ⑧查询计算机科学系全体学生名单

    select sname from student where sdept='cs';
    


    ⑨查询所有年龄在20岁以下的学生姓名及年龄

    select sname,sage from student where sage<20;
    


    ①查询考试成绩不及格的学生的学号

    select distinct sno from sc where grade<60;
    


    ②查询年龄在20-23之间的学生的姓名,系别和年龄

    select sname,sdept,sage from student where sage between 20 and 23;
    


    ③查询年龄不在20-23岁之间的学生姓名,系别和年龄

    select sname,sdept,sage from student where sage not between 20 and 23;
    

    ④查询计算机科学系(cs)、数学系(ma)和信息系(is)学生的姓名和性别

    select sname,ssex from student where sdept in ('cs','ma','is');
    


    ⑤查询既不是计算机科学系,数学系,也不是信息系的学生的姓名和性别。

    select sname,ssex from student where sdept not in ('is','ma','cs');
    

    ⑥查询学号为201215121的学生的详细情况

    • %,代表任意长度(可以为0)的字符串,例a%b,表示以a开头,以b结尾的任意长度的字符串
    • _(下横线),代表任意单个字符
    select * from student where sno like '201215121';
    


    ⑦查询所有姓刘学生的姓名,学号和性别

    select sname,sno,ssex from student where sname like '刘%';
    


    ⑧查询姓“欧阳”且全名为三个汉字的学生的姓名。

    select sname from student where sname like '欧阳_';
    


    ⑨查询名字中第二个字为“阳”字的学生的姓名和学号

    select sname,sno from student where sname like '_阳%';
    


    ①查询所有不姓刘的学生姓名,学号和性别

    select sname,sno,ssex from student where sname not like '刘%';
    


    ②查询db_desing课程的课程号

    select cno from course where cname like 'db\_design';
    #反斜杠\,用于转义
    


    ③查询缺少成绩的学生的学号和相应的课程号

    select sno,cno from sc where grade is null;
    #‘is’不能用‘=’替代
    


    ④查询所有有成绩的学生学号和课程号

    select sno,cno from sc where grade is not null;
    

    ⑤查询计算机系年龄在20岁以下的学生姓名

    select sname from student where sdept='cs' and sage<20;
    


    ⑥order by子句

    • 按一个或多个属性列排序
    • 升序:asc。降序:desc,默认升序

    查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列

    select sno,grade from sc where cno='3' order by grade desc;
    


    ⑦查询全体学生情况,按所在的系号升序,同一系按年龄降序排列

    select * from student order by sdept,sage desc;
    


    ⑧聚集函数

    • 统计元组个数:count(*)
    • 统计一列中值的个数:count(distinct <列名>)
    • 计算一列值的总和(此列必须是数值型):sum(distinct <列名>)
    • 计算一列值的平均值(此列必须是数值型):avg(distinct <列名>)
    • 计算一列中的最大值和最小值:max(distinct <列名>),min(distinct <列名>)
      ⑨查询学生总人数
    select count(*) from student;
    


    ①查询选修了课程的学生人数

    select count(distinct sno) from sc;
    


    ②计算1号课程的学生平均成绩

    select avg(grade) from sc where cno='1';
    


    ③查询选修一号课程的学生的最高分数

    select max(grade) from sc where cno='1';
    


    ④查询学生201215121选修课程的总学分数

    select sum(ccredit) from sc,course where sno='201215121' and sc.cno=course.cno;
    


    ⑤group by子句

    • 细化聚集函数的作用对象
    • 如果未对查询结果分组,聚集函数将作用于zhengge查询结果
    • 对查询结果分组后,聚集函数将分别作用于每个组
    • 按指定的一列或多列值分组,值相等的为一组

    ⑥求各个课程号及相应的选课人数

    select cno,count(sno) from sc group by cno;
    


    ⑦查询选修了3门以上课程的学生学号

    select sno from sc group by sno having count(*)>3;
    


    ⑧查询平均成绩大于等于90分的学生学号和平时成绩

    select sno,avg(grade) from sc group by sno having avg(grade)>=90;
    #where子句中是不嗯给你用聚集函数作为条件表达式
    


    ⑨having短语与where子句的区别

    • 作用对象不同
    • where子句作用于基表或视图,从中选择满足条件的元组
    • having短语作用于组,从中选择满足条件的组
  • 相关阅读:
    array_keys
    strval
    is_numeric
    php static延迟静态绑定
    page39 类的访问权限控制
    page34类的继承
    被遗忘在角落的类型检查函数
    2.2.5重写静态变量
    2.2.3使用parent作用域
    16个最棒的WordPress博客写作发布工具【博主桌面工具】
  • 原文地址:https://www.cnblogs.com/observering/p/13781720.html
Copyright © 2020-2023  润新知