zoukankan      html  css  js  c++  java
  • MySQL(3):SELECT语法

    一,数据库语句

    数据库数据是通过DML语句管理数据库数据,包括:

    • INSERT (添加数据语句)
    • UPDATE (更新数据语句)
    • DELETE (删除数据语句)

    1:INSERT (添加数据语句)

    INSERT INTO 表名[(字段1,字段2,字段3,...)] VALUES('值1','值2','值3')
    

    注意 :

    1,字段或值之间用英文逗号隔开;
    2'字段1,字段2...'该部分可省略 , 但添加的值务必与表结构,数据列,顺序相对应,且数量一致;
    3,可同时插入多条数据 , values 后用英文逗号隔开

    2:UPDATE (更新数据语句)

    UPDATE 表名 SET column_name=value [,column_name2=value2,...] [WHERE condition];
    

    #注意 :
    1,column_name 为要更改的数据列;
    2,value 为修改后的数据 , 可以为变量 , 具体指 , 表达式或者嵌套的SELECT结果;
    3,condition 为筛选条件 , 如不指定则修改该表的所有列数据

    3:DELETE (删除数据语句)

    DELETE FROM 表名 [WHERE condition];
    

    #注意 : condition为筛选条件 , 如不指定则删除该表的所有列数据

    二,DQL( Data Query Language 数据查询语言 )

    查询数据库数据 , 如SELECT语句,简单的单表查询或多表的复杂查询和嵌套查询,DQL是数据库语言中最核心,最重要的语句也是使用频率最高的语句

    1,指定查询字段

    # 查询所有学生信息
    SELECT * FROM student;
    

    # 查询指定列(学生的学号和姓名)
    SELECT studentno,studentname FROM student;

    2,DISTINCT关键字的使用

    作用 : 去掉SELECT查询返回的记录结果中重复的记录(返回所有列的值都相同),只返回一条

    # 查看哪些同学参加了考试(学号)--去除重复项
    SELECT * FROM result; 
    SELECT studentno FROM result; 
    SELECT DISTINCT studentno FROM result;
    

    #说明:一个学生有很5课成绩,但是只有他1个学号,如果不加DISTINCT,
    只执行SELECT studentno FROM result;,那么会根据他的5课成绩查出5个学号的,
    如果加了DISTINCT,去掉重复项,那么就只有一个学号了

    3,where条件语句

    用于检索数据表中符合条件的记录,搜索条件可由一个或多个逻辑表达式组成 , 结果一般为真或假

    # 查询考试成绩在95-100之间的学生学号
    SELECT Studentno,StudentResult 
    FROM result
    WHERE StudentResult>=95 AND StudentResult<=100;
    

    # AND也可以写成 &&
    SELECT Studentno,StudentResult
    FROM result
    WHERE StudentResult>=95 && StudentResult<=100;

    # 除了1000号同学,要其他同学的成绩
    SELECT studentno,studentresult
    FROM result
    WHERE studentno!=1000;

    # 使用NOT
    SELECT studentno,studentresult
    FROM result
    WHERE NOT studentno=1000;

    4,模糊查询

    #查询姓李的同学的学号及姓名
    #like结合使用的通配符 : % (代表0到任意个字符)  _ (一个字符)
    SELECT studentno,studentname FROM student
    WHERE studentname LIKE '李%';
    

    #查询姓李的同学,后面只有一个字的
    SELECT studentno,studentname FROM student
    WHERE studentname LIKE '李_';

    #查询姓李的同学,后面只有两个字的
    SELECT studentno,studentname FROM student
    WHERE studentname LIKE '李__';

    #查询姓名中含有 文 字的
    SELECT studentno,studentname FROM student
    WHERE studentname LIKE '%文%';

    #查询学号为1000,1001,1002的学生姓名
    SELECT studentno,studentname FROM student
    WHERE studentno IN (1000,1001,1002);

    #查询地址在北京,南京,河南洛阳的学生学号姓名
    SELECT studentno,studentname,address FROM student
    WHERE address IN ('北京','南京','河南洛阳');

    #查询出生日期没有填写的同学
    #不能直接写=NULL , 这是代表错误的 , 用 is null
    SELECT studentname FROM student
    WHERE BornDate IS NULL;

    #查询出生日期填写的同学
    SELECT studentname FROM student
    WHERE BornDate IS NOT NULL;

    #查询没有写家庭住址的同学(空字符串不等于null)
    SELECT studentname FROM student
    WHERE Address='' OR Address IS NULL;

    5,连接查询

    连接查询: 如需要多张数据表的数据进行查询,则可通过连接运算符实现多个查询
    1,内连接 inner join:查询两个表中的结果集中的交集
    2,外连接 outer join:
    2-1,左外连接 left join:以左表作为基准,右边表来一一匹配,匹配不上的,返回左表的记录,右表以NULL填充
    2-2,右外连接 right join:以右表作为基准,左边表来一一匹配,匹配不上的,返回右表的记录,左表以NULL填充

    #查询参加了考试的同学信息(学号,学生姓名,科目编号,分数)
    SELECT * FROM student;
    SELECT * FROM result;
    

    #查询student表的学生学号=result表的学生学号时的同学信息(学号,学生姓名,科目编号,分数)
    #内连接
    SELECT s.studentno,studentname,subjectno,StudentResult
    FROM student s
    INNER JOIN result r
    ON r.studentno = s.studentno

    # 右连接(也可实现)
    SELECT s.studentno,studentname,subjectno,StudentResult
    FROM student s
    RIGHT JOIN result r
    ON r.studentno = s.studentno

    # 等值连接
    SELECT s.studentno,studentname,subjectno,StudentResult
    FROM student s , result r
    WHERE r.studentno = s.studentno

    # 左连接 (查询了所有同学,不考试的也会查出来)
    SELECT s.studentno,studentname,subjectno,StudentResult
    FROM student s
    LEFT JOIN result r
    ON r.studentno = s.studentno

    #查一下缺考的同学(左连接应用场景)
    SELECT s.studentno,studentname,subjectno,StudentResult
    FROM student s
    LEFT JOIN result r
    ON r.studentno = s.studentno
    WHERE StudentResult IS NULL

    6,排序和分页

    ORDER BY 语句用于根据指定的列对结果集进行排序,默认按照ASC升序对记录进行排序。

    # 查询C语言-1的考试结果(学号 学生姓名 科目名称 成绩)
    # 按成绩降序排序
    SELECT s.studentno,studentname,subjectname,StudentResult
    FROM student s
    INNER JOIN result r
    ON r.studentno = s.studentno
    INNER JOIN `subject` sub
    ON r.subjectno = sub.subjectno
    WHERE subjectname='C语言-1'
    ORDER BY StudentResult DESC , studentno  
    

    # 每页显示5条数据
    SELECT s.studentno,studentname,subjectname,StudentResult
    FROM student s
    INNER JOIN result r
    ON r.studentno = s.studentno
    INNER JOIN subject sub
    ON r.subjectno = sub.subjectno
    WHERE subjectname='C语言-1'
    ORDER BY StudentResult DESC , studentno
    LIMIT 0,5

  • 相关阅读:
    [spoj DISUBSTR]后缀数组统计不同子串个数
    [poj 3261]后缀数组+滑窗最小值
    [poj 1743]差分+后缀数组
    [codechef MEXDIV]Mex division
    JavaScript中的数组和对象 增删遍
    ajax返回的值有两种方法,一种是把async:true改为false。 另一种是回调函数。
    使用smart-npm和npm安装完毕之后发现 不是内部命令和外部命令!
    移动端rem设置,自动更改html<font-size>
    总结js创建object的方式(对象)
    用css方法 可以实现多行 超出宽度 出点点点号
  • 原文地址:https://www.cnblogs.com/edda/p/13328451.html
Copyright © 2011-2022 走看看