• MySQL基础1


    以下为在初次学习数据库有关知识时学习到的一些基本操作(部分)

    创建表     create table tb_name;

    查看存储引擎      show engines;

    创建数据库     create database db_name;

    可以查看choose数据库的相关信息     show create database choose;

    删除数据库stu drop database stu;

    显示表结构 desc tb_name;

    创建部门信息表tb_dept

    create table tb_dept(

          id          int(11) primary key,

          name       varchar(22) not null,

          location  varchar(50)

       );

    创建一个员工信息表tb_emp,设置其字段depId为外键,引用的是tb_dept表的主键id:

    非空约束   NOT NULL

    创建部门信息表tb_dept,要求部门的名称不能重复

    create table tb_dept(

           id               int(11) primary key,

           name       varchar(22),

           location  varchar(50),

           constraint sth UNIQUE(name)

        );

    或者   create table tb_dept(

           id               int(11) primary key,

           name       varchar(22) UNIQUE,

           location  varchar(50)

        );

     

    定义员工信息表tb_emp,指定员工的id为自动增长列

    create table tb_emp(

                     id                              int(11) primary key AUTO_INCREMENT,

                     name                      varchar(25) NOT NULL,

                     deptId                     int(11)  DEFAULT  1111,

                     salary                      float,

                     constraint fk_emp_dept foreign key(deptId) references tb_dept (id)

          );

     

    创建部门信息表tb_dept,要求部门的名称不能重复

    create table tb_dept(

           id               int(11) primary key,

           name       varchar(22),

           location  varchar(50),

           constraint sth UNIQUE(name)

        );

    默认约束   定义员工信息表tb_emp,指定员工的部门编号默认为1111

    create table tb_emp

    id                              int(11) primary key,

    name                      varchar(25) NOT NULL,

    deptId                     int(11)  DEFAULT  1111,

    salary                      float,

    constraint fk_emp_dept foreign key(deptId) references tb_dept(id)

    );

    修改数据表

    将数据表tb_dept改名为tb_deptment

    alter table tb_dept RENAME tb_deptment;

    show tables;

    将数据表tb_deptmentname字段的数据类型由varchar(22)改为varchar(30)

    alter table tb_deptment MODIFY name VARCHAR(30);

    desc tb_department

    将数据表tb_department中的location字段名改为loc,数据类型保持不变

    alter table tb_deptment CHANGE location loc varchar(50);

    将数据表tb_department中的loc字段名改为location,数据类型变varchar(60)

    alter table tb_deptment CHANGE loc location varchar(60);

    在数据表tb_department中添加一个int类型的字段managerId(部门经理编号)

    alter table tb_deptment ADD managerId int(10);

    在数据表tb_department中第一列添加一个int类型的字段column2

    alter table tb_deptment ADD column2 int(11) FIRST;

    在数据表tb_departmentname列后添加一个int类型的字段column3

    alter table tb_deptment ADD column3 int(11) AFTER name;

    删除数据表tb_department中的column2字段

    alter table tb_deptment DROP column2;

    修改数据表tb_department中的column1字段为表的第1个字段

    alter table tb_deptment MODIFY column1 varchar(12) first;

    修改数据表tb_department中的column1字段插入到location字段后面

    alter table tb_deptment MODIFY column1 varchar(12) AFTER location;

    更改表的存储引擎。将数据表tb_deptment的存储引擎改为MyISAM

    alter table tb_deptment ENGINE=MyISAM;

    删除没有被关联的表。删除数据表tb_dept2

    drop table if exists tb_dept2;

    删除被其他表关联的主表。分几种情况:

    先删除与它关联的子表,再删除父表

     如果要保留子表,则只需将关联的表的外键约束条件取消,然后就可删除父表

    删除被数据表tb_emp(子表)关联的数据表tb_dept2(父表)

    alter table tb_emp DROP FOREIGN KEY fk_emp_dept;

    drop table tb_dept2;

    操作表数据

    1插入记录

    向XSCJ数据库的表XSB中插入如下的一行:

    101101  王林  计算机  男  19900210  50

    INSERT INTO XSB(XH, XM, XB, CSSJ, ZY, ZXF)

    VALUES(‘101101’, ‘王林’, ‘男’,TO_DATE(‘19900210’,’YYYYMMDD’), ‘计算机’, 50);

    使用SELECT语句查询是否添加了该行数据:

    SELECT XH, XM, XB, CSSJ, ZY, ZXF

    把一个表中的部分数据插入到另一个表中,但结果集中的每行数据的字段数、字段的数据类型要与被操作表完全一致

    INSERT INTO table_name

    derived_table

    2修改记录

    将XSCJ数据库的XSB表中学号为“101110的学生备注列值改为三好学生

    UPDATE XSB

    SET BZ=’三好学生’

      WHERE XH=’101110’;

    将XSB表中的所有学生的总学分都增加10。

    UPDATE XSB

      SET ZXF=ZXF+10;

    将姓名为“罗林琳”的同学的专业改为“通信工程”,备注改为“转专业学习”,学号改为“101241

    UPDATE XS

        SET ZY='通信工程',

          BZ='转专业学习',

          XH='101241'

        WHERE XM= '罗林琳';

    查询XSB表中ZXF大于50同学的XH、XM和ZXF

    SELECT XH, XM, ZXF

        FROM XSB

        WHERE ZXF>50;

    查询XSB表中的所有列       SELECT * FROM XSB;

    修改XSB表中计算机系同学的XHXMZXF分别为学号、姓名和总学分

    SELECT XH AS 学号,XM AS 姓名,ZXF AS 总学分

        FROM XSB

        WHERE ZY= '计算机';

    As可以省略

    对XSCJ数据库的XSB表只选择ZY和ZXF,消除结果集中的重复行。

    SELECT DISTINCT ZY AS 专业,ZXF AS 总学分

    FROM XSB;

    对XSCJ数据库的XSB表选择ZY和ZXF,不消除结果集中的重复行。

    SELECT ALL ZY AS 专业名,ZXF AS 总学分

    FROM XSB;

    查询XSB表中通信工程专业总学分大于等于42的同学的情况。

    SELECT *

       FROM XSB

       WHERE ZY= '通信工程' AND ZXF>=42;

    查询成绩表中期末成绩<60,总评成绩>=60分的同学

    select * from xscj where zpcj>=60 and qmcj<60;

    查询XSB表中姓“王”且单名的学生情况

    SELECT * FROM XSB

    WHERE XM LIKE '王_';

    (插入出生年月类型yyyymmdd )

    查询XSB表中不在1989年出生的学生情况

    SELECT * FROM XSB

       WHERE  CSSJ  NOT  BETWEEN  TO_DATE('19890101', 'YYYYMMDD') 

               AND    TO_DATE('19891231', 'YYYYMMDD');

    查询CP表中库存量为“200”“300500的情况。

    SELECT *

       FROM CP

       WHERE KCL IN (200,300,500);

    或者SELECT *

       FROM CP

       WHERE KCL=200 OR KCL=300 OR KCL=500;

    查询XSCJ数据库中总学分尚不定的学生情况(即为空值的)

    SELECT *  FROM XSB

       WHERE ZXF IS NULL;

    子查询

    在XSB表中查找1990年1月1日以前出生的学生的姓名和专业。

    SELECT XM, ZY

        FROM  (SELECT * FROM XSB

           WHERE CSSJ<TO_DATE('19900101', 'YYYYMMDD'));

    查找比所有计算机系学生年龄都大的学生。

    SELECT * FROM XSB

        WHERE  CSSJ <ALL

               ( SELECT CSSJ

                      FROM XSB

                      WHERE ZY= '计算机'

               );

    查找课程号206的成绩不低于课程号101的最低成绩的学生的学号。

    SELECT XH FROM CJB

        WHERE KCH = '206' AND CJ>= ANY

               ( SELECT CJ FROM CJB

                      WHERE KCH = '101'

               );

    查找选修了全部课程的同学姓名。

    SELECT XM FROM XSB

       WHERE NOT EXISTS

               ( SELECT *FROM KCB

                      WHERE NOT EXISTS

                          ( SELECT *

                              FROM CJB

                              WHERE XH=XSB.XH AND KCH=KCB.KCH )

                );

    查找与101102号同学所选修课程一致的同学的学号。

    SELECT DISTINCT XH FROM CJB CJ1

        WHERE NOT EXISTS

               ( SELECT *FROM CJB CJ2

                  WHERE CJ2.XH ='101102' AND NOT EXISTS

                       ( SELECT *FROM CJB CJ3

                         WHERE CJ3.XH= CJ1.XH

                             AND CJ3.KCH = CJ2. KCH)

               );

    在XSB表中查找1990年1月1日以前出生的学生的姓名和专业。

    SELECT XM, ZY

        FROM  (SELECT * FROM XSB

           WHERE CSSJ<TO_DATE('19900101', 'YYYYMMDD'));

    查找XSCJ数据库每个学生的情况以及选修的课程情况

    SELECT XSB.* ,CJB.*

       FROM XSB , CJB

       WHERE XSB.XH=CJB.XH;

    查找选修了“计算机基础”课程且成绩在80分以上的学生学号、姓名、课程名及成绩。

    SELECT XSB.XH, XM, KCM, CJ

       FROM XSB, KCB, CJB

       WHERE XSB.XH = CJB.XH AND KCB.CH = CJB. KCH

           AND KCM = '计算机基础'  AND CJ >= 80;

    用FROM的JOIN关键字表达下列查询:查找选修了206课程且成绩在80分以上的学生姓名及成绩。

    SELECT XM , CJ

       FROM XSB JOIN CJB ON XSB.XH = CJB.XH

       WHERE KCH = '206' AND CJ>=80;

     用FROM的JOIN关键字表达下列查询:查找选修了“计算机基础”课程且成绩在80分以上的学生学号、姓名、课程名及成绩。(三表连接)

    SELECT XSB.XH , XM , KCM , CJ

       FROM XSB

           JOIN CJB JOIN KCB ON CJB.KCH = KCB.KCH

               ON XSB.XH = CJB.XH

       WHERE KCM = '计算机基础'  AND CJ>=80;

    查找不同课程成绩相同的学生的学号、课程号和成绩。

    SELECT a.XH,a.KCH,b.KCH,a.CJ

           FROM CJB a JOIN CJB b

           ON a.CJ=b.CJ AND a.XH=b.XH AND a.KCH!=b.KCH;

    A表                B表

         a1       a2       b1      b2
    ------------    ------------
    1          4       2         3
    2          5       4         5
    6          7       6         7
    3          4       8         9
    7          8

    左连接
    select a.a1,a.a2,b.b2
    from a left outer join b
             on a.a2=b.b1
    执行结果为:            a1   a2    b2
                         ----------------
                          1      4      5
                          3      4      5
                          7      8      9
                          2      5
                          6      7

    右连接
    select a.a1,a.a2,b.b2
    from a right outer join b
             on a.a2=b.a1
    执行结果为:            a1   a2    b2
                         ----------------
                          1      4      5
                          3      4      5
                          7      8      9
                                        7
                                        3

    交叉连接
    select a.a1,a.a2,b.b2
    from a cross join b
    执行结果为:           a1   a2    b2
                         ----------------
                          1      4      3
                          2      5      3
                          6      7      3
                          3      4      3   
                          7      8      3
                          1      4      5
                         
    …………..

    左连接右连接交叉连接具体问题

    查找所有学生情况及他们选修的课程号,若学生未选修任何课,也要包括其情况。

    SELECT XSB.* , KCH

       FROM XSB LEFT OUTER JOIN CJB ON XSB.XH = CJB.XH;

      查找被选修了的课程的选修情况和所有开设的课程名。

    SELECT CJB.* , KCM

       FROM CJB RIGHT JOIN KCB ON CJB.KCH= KCB.KCH;

    列出学生所有可能的选课情况。

    SELECT XH, XM, KCH, KCM

       FROM XSB CROSS JOIN KCB;

    求选修101课程的学生的平均成绩。

    SELECT AVG(CJ) AS 课程101平均成绩

       FROM CJB

       WHERE KCH='101';

    求选修101课程的学生的最高分和最低分。

    SELECT MAX(CJ) AS 课程101的最高分, MIN(CJ) AS 课程101的最低分

       FROM CJB  

       WHERE KCH='101';

    求学生的总人数。

    SELECT COUNT(*) AS 学生总数

       FROM XSB;

    求选修了课程的学生总人数。

    SELECT COUNT(DISTINCT XH) AS 选修了课程的总人数

       FROM CJB;

    统计离散数学课程成绩在85分以上的人数。

    SELECT COUNT(CJ) AS 离散数学85分以上的人数

       FROM CJB

       WHERE CJ>=85 AND KCH=

           ( SELECT KCH

                   FROM KCB

               WHERE KCM= '离散数学'

           );

    将XSCJ数据库中各专业输出。

    SELECT ZY AS 专业

       FROM XSB

       GROUP BY ZY;

    求XSCJ数据库中各专业的学生数。

    SELECT ZY AS 专业,COUNT(*) AS 学生数

       FROM XSB

       GROUP BY ZY;

    求被选修的各门课程的平均成绩和选修该课程的人数。

    SELECT KCH AS 课程号, AVG(CJ) AS 平均成绩,COUNT(XH) AS 选修人数

       FROM CJB

       GROUP BY KCH;

    HAVING子句

    查找XSCJ数据库中平均成绩在85分以上的学生的学号和平均成绩。

    SELECT XH AS 学号, AVG(CJ) AS 平均成绩

       FROM CJB

       GROUP BY XH

       HAVING AVG(CJ)>=85;

    查找选修课程超过两门且成绩都在80分以上的学生的学号

    SELECT XH AS 学号

       FROM CJB

       WHERE CJ>=80

       GROUP BY XH

           HAVING COUNT(*) > 2;

    查找通信工程专业平均成绩在85分以上的学生的学号和平均成绩

    SELECT XH AS 学号,AVG(CJ) AS 平均成绩

           FROM CJB

           WHERE XH IN

                   ( SELECT XH

                   FROM XSB

                   WHERE ZY= '通信工程'

               )

           GROUP BY XH

           HAVING AVG(CJ) > =85;

    将通信工程专业的学生按出生时间先后排序。

    SELECT *

       FROM XSB

       WHERE ZY= '通信工程'

       ORDER BY CSSJ;

    将计算机专业学生的“计算机基础”课程成绩按降序排列。

    SELECT XM AS 姓名, KCM AS 课程名, CJ AS 成绩

       FROM XSB, KCB, CJB

       WHERE XSB.XH=CJB.XH AND CJB.KCH= KCB.KCH

           AND KCM= '计算机基础' AND ZY= '计算机'

           ORDER BY CJ DESC;

    查找xs表中学号最靠前的5位学生的信息。

    select 学号, 姓名, 专业名, 性别, 出生日期, 总学分

        from xs

        order by 学号

        limit 5;

    --11.统计每个学生的选课门数,并按选课门数的递增顺序显示结果。 SELECT student.Sname 学生姓名,student.Sno 学生学号,COUNT(SC.Sno) 选课门数 FROM student inner join SC ON SC.Sno=student.Sno GROUP BY student.Sname,student.Sno ORDER BY COUNT(SC.Sno) ASC

    select student.sname,sc.sno,count(cno) cc

    from sc inner join student

    on sc.sno=student.sno

    group by sno

    order by cc asc;

  • 相关阅读:
    hdu 思维风暴
    HDU 4183Pahom on Water(网络流之最大流)
    现在仍在工作的12名最“屌”的程序猿
    安卓ContentObserver模式获取短信用正则自己主动填充验证码
    Android插件实例——360 DroidPlugin具体解释
    mysql---union的使用方法
    SICP 习题 (2.11)解题总结:区间乘法的优化
    jQuery中的ajax
    Ajax的简单总结
    jQuery插件开发
  • 原文地址:https://www.cnblogs.com/RR-99/p/10369386.html
Copyright © 2020-2023  润新知