zoukankan      html  css  js  c++  java
  • MYSQL数据库

    sql 规范:


    <1> 在数据库系统中,SQL语句不区分大小写(建议用大写) 。但字符串常量区分大小写。建议命令大写,表名库名小写;

    <2> SQL语句可单行或多行书写,以“;”结尾。关键词不能跨多行或简写。

    <3> 用空格和缩进来提高语句的可读性。子句通常位于独立行,便于编辑,提高可读性。

    <4> 注释:单行注释:--

          多行注释:/*......*/

    <5>sql语句可以折行操作,用逗号分隔;

    数据库操作:

    -- 创建数据库

    CREATE DATABASE db_name [CHARACTER SET utf8];

    --查看数据库

    SHOW DATABASES;查看所有数据库

    SHOW CREATE DATABASE db_name;查看数据库的创建信息

    --修改数据库

    ALTER DATABASE db_name [CHARACTER SET xxx];

    --删除数据库

    DROP DATABASE db_name;

    --使用数据库

    USE db_name;

    数据表操作:

    --创建表

    CREATE TABLE table_name(字段1 类型 [约束条件],

    字段2 类型 [约束条件],

    字段3 类型 [约束条件])[CHARACTER SET xxx];

            (字段若是索引:可设置自增,auto_increment;

      对于自增可以设置步长和起始值
           show session variables like 'auto_inc%';
           set session auto_increment_increment=2;
           set session auto_increment_offset=10;

             字段也可以设置默认值:defalut 值)

    数据类型:

    • int 整数
    • varchar(n) n 表示字符串长度;
    • char(n) n表示固定的字符串长度;
    • tinyint ,小整数,数据类型用于保存一些范围的整数数值范围,MySQL中无布尔值,使用tinyint(1)构造。
    • decima(m[d])l,精确小数,m是数字总个数(负号不算),d是小数点后个数。 m最大值为65,d最大值为30。
    • float[(m.,d)], 单精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。
    • DOUBLE[(M,D)] ,精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。
    • text数据类型用于保存变长的大字符串,可以组多到65535 (2**16 − 1)个字符。
    • set集合类型
    • DATE:YYYY-MM-DD(1000-01-01/9999-12-31)

    约束条件:

    • 非空:not null
    • 唯一:unique
    • 主键:primary key

    -- 查看表结构信息

    DESC table_name;查看表结构

    SHOW TABLES; 查看当前数据库里的所有表

    SHOW CREATE TABLE table_name;查看当前数据表结构

    --修改表结构

    ----增加字段

    ALTER TABLE table_name ADD 字段 类型 [约束条件] [first/after 字段名];#[first/after 字段名控制添加字段的位置

    ---修改字段

    ALTER TABLE table_name MODIFY 字段 类型 [约束条件];

    ---修改字段名

    ALTER TABLE tabler-name CHANGE 字段 新字段 类型;

    ---删除一列

    ALTER TABLE table_name DROP 字段;

    ---修改表名                

    ALTER TABLLE table_name TO new_table_name;

    --删除表;

    DROP TABLE table_name;

    --表记录的增删改查

    ---增加信息

    INSERT [INTO]  table_name (字段1,字段2,。。。) VALUES (值1,。。。),(值2.。。。);

    INSERT [INTO] table_name set 字段1=值,字段2=值。。。。;

    ---修改信息

    UPDATE table_name set 字段=值 WHERE 子句;

    ---删除表记录

    DELETE FROM table_name [where 子句];

    ---查语句

    SELECT *|字段1|字段2|。。。FROM table_name 

                 WHERE 条件

                 GROUP BY  字段

                 HAVING 条件

                 ORDER BY 字段

                 LIMIT 限制条数

    group function:

    --<1> 统计表中所有记录
    
                -- COUNT(列名):统计行的个数
                        -- 统计一个班级共有多少学生?先查出所有的学生,再用count包上
                         select count(*) from ExamResult;
                        -- 统计JS成绩大于70的学生有多少个?
                         select count(JS) from ExamResult where JS>70;
                        -- 统计总分大于280的人数有多少?
                         select count(name) from ExamResult
                               where (ifnull(JS,0)+ifnull(Django,0)+ifnull(OpenStack,0))>280;
                        -- 注意:count(*)统计所有行;     count(字段)不统计null值.
    
                -- SUM(列名):统计满足条件的行的内容和
                        -- 统计一个班级JS总成绩?先查出所有的JS成绩,再用sum包上
                            select JS as JS总成绩 from ExamResult;
                            select sum(JS) as JS总成绩 from ExamResult;
                        -- 统计一个班级各科分别的总成绩
                            select sum(JS) as JS总成绩,
                                   sum(Django) as Django总成绩,
                                   sum(OpenStack) as OpenStack from ExamResult;
    
                        -- 统计一个班级各科的成绩总和
                            select sum(ifnull(JS,0)+ifnull(Django,0)+ifnull(Database,0))
                                                        as 总成绩 from ExamResult;
                        -- 统计一个班级JS成绩平均分
                            select sum(JS)/count(*) from ExamResult ;
                        -- 注意:sum仅对数值起作用,否则会报错。
    
                -- AVG(列名):
                                -- 求一个班级JS平均分?先查出所有的JS分,然后用avg包上。
                                    select avg(ifnull(JS,0)) from ExamResult;
                                -- 求一个班级总分平均分
                                    select avg((ifnull(JS,0)+ifnull(Django,0)+ifnull(Database,0)))
                                                             from ExamResult ;
                -- Max、Min
                                -- 求班级最高分和最低分(数值范围在统计中特别有用)
                                  select Max((ifnull(JS,0)+ifnull(Django,0)+ifnull(OpenStack,0)))
                                  最高分 from ExamResult;
                                  select Min((ifnull(JS,0)+ifnull(Django,0)+ifnull(OpenStack,0)))
                                  最低分 from ExamResult;
                                -- 求购物表中单价最高的商品名称及价格
                                  ---SELECT id, MAX(price) FROM order_menu;--id和最高价商品是一个商品吗?
                                  
                                  SELECT MAX(price) FROM order_menu; 
    
                                -- 注意:null 和所有的数计算都是null,所以需要用ifnull将null转换为0!
                                --      -----ifnull(JS,0)

     正则表达式:

    SELECT * FROM employee WHERE emp_name REGEXP '^yu';

    外键约束:

    ALTER TABLE student ADD CONSTRAINT abc

                         FOREIGN KEY(charger_id)

           REFERENCES classcharger(id);

    ALTER TABLE student DROP FOREIGN KEY abc;

    多表查询:

    内链接:

     select * from employee,department where employee.dept_id = department.dept_id;
    --select * from employee inner join department on employee.dept_id = department.dept_id;

    外链接:

    --(1)左外连接:在内连接的基础上增加左边有右边没有的结果
    
     select * from employee left join department on employee.dept_id = department.dept_id;
     --(2)右外连接:在内连接的基础上增加右边有左边没有的结果
    
     select * from employee RIGHT JOIN department on employee.dept_id = department.dept_id;
    4、查询平均成绩大于八十分的同学的姓名和平均成绩
    
        SELECT sname,AVG(num) FROM student INNER JOIN score 
                      ON student.sid=score.student_id
                      GROUP BY student_id HAVING AVG(num)>80
    
    5、查询所有学生的学号,姓名,选课数,总成绩
       SELECT  sname,student.sid,COUNT(student.sid),SUM(num) FROM student 
             INNER  JOIN score ON student.sid=score.student_id
             GROUP BY student_id
    
    6、查询姓李老师的个数
       SELECT COUNT(tid) FROM teacher WHERE tname LIKE "李%"
       
    7、查询没有报李平老师课的学生姓名
    
       SELECT sname FROM student WHERE sid not in 
       (SELECT DISTINCT student_id FROM score WHERE course_id  in 
       (SELECT cid FROM teacher INNER JOIN course ON teacher.tid=course.teacher_id 
                           WHERE tname LIKE "李平%"))
    
      
    8、查询物理课程比生物课程高的学生的学号
        SELECT A.student_id,A.num,b.num FROM            
    
        (SELECT * FROM score WHERE course_id=(SELECT cid FROM course WHERE cname="物理"))as A
    
        INNER JOIN
    
        (SELECT * FROM score WHERE course_id=(SELECT cid FROM course WHERE cname="生物"))as B
    
        ON
        A.student_id=B.student_id
    
        WHERE A.num>B.num
    
    9、查询没有同时选修物理课程和体育课程的学生姓名
    
         SELECT sname FROM student WHERE sid NOT in (SELECT student_id FROM  score 
         WHERE course_id in (SELECT cid FROM course WHERE cname="物理" OR cname="体育")
    
         GROUP BY student_id HAVING COUNT(sid)=2)
    
    10、查询挂科超过两门(包括两门)的学生姓名和班级
    
        SELECT sname,caption FROM student LEFT JOIN class ON student.class_id=class.cid 
                 where sid in (SELECT student_id FROM score WHERE num<60 
                 GROUP BY student_id HAVING COUNT(sid)>1
                )
    
    11 、查询选修了所有课程的学生的姓名
        SELECT sname FROM student WHERE sid in (SELECT student_id FROM score
    
        GROUP BY student_id HAVING COUNT(sid)!=(SELECT COUNT(cid) FROM course))
    
    12、查询李平老师教的课程的所有成绩记录
    
        
        SELECT * FROM score WHERE course_id in (SELECT cid FROM course LEFT JOIN teacher ON teacher.tid=course.teacher_id
                 WHERE tname="李平老师")
    练习
     
  • 相关阅读:
    MarkDown学习
    做网站的或者博客的网站
    Calendar日历简单用法
    Cron表达式范例
    CSVFileUtil 读取写入CSV文件简单工具类
    直接读取ZIP包数据 线上、线下方法
    Spring @Async/@Transactional 失效的原因及解决方案
    多线程学习 读写锁
    多线程学习 公平锁和非公平锁
    多线程学习 ThreadLocal的使用。
  • 原文地址:https://www.cnblogs.com/mona524/p/7241785.html
Copyright © 2011-2022 走看看