zoukankan      html  css  js  c++  java
  • DQL查询数据(最重点)

    数据库查询语言:

    • 所有的查询都用它,Select
    • 简单的查询,复杂的查询它都能做
    • 数据库中最核心的语言,最重要的语句
    • 使用频率最高的语句

    指定查询字段:

     1 --查询全部的学生  select 字段 from 表
     2 select * from student
     3 
     4 -- 查询指定字段
     5 select `studentNo`,`studentName` from student
     6 
     7 --别名,给结果起一个名字 AS  可以给字段起别名 也可以给表起别名
     8 select `studentNo` as 学号,`studentname` as 学生姓名 from student as s
     9 
    10 --函数 concat(a,b)
    11 select concat(`姓名`,studentname) as 新名字 from student

    语法:select 字段 .... from 表

    有的时候,列名字不是那么的人性化,我们起别名 as   字段名 as 别名   表名  as 别名

    去重查询

    1 SELECT *FROM result--查询全部的考试成绩
    2 SELECT`StudentNo`FROM result --查询有哪些同学参加了考试

    1 --发现重复数据,去重
    2 
    3 SELECT DISTINCT `StudentNo`FROM result

    数据库的列:

    SELECT VERSION--查询系统版本(函数)
    
    
    SELECT 100*3-1 AS 计算结果--用来计算(表达式)
    
    
    SELECT @@auto_increment_increment -- 查询自增的步长(变量)
    
    
    --学员考试成绩+1分查看
    SELECT `studentNo `, 'studentResult` +1 AS '提分后’FROM result

     数据库中的表达式:文本值,列,Null,函数,计算表达式,系统变量

    select 表达式 from 表

    where:

     1 SELECT studentNo,'studentResult` FROM result
     2 
     3 --查询考试成绩在95~100分之间
     4 SELECT studentNo, 'studentResult` FROM resultWHERE StudentResult>=95 AND StudentResult<=100
     5 
     6 
     7 -- and&&
     8 SELECT studentNo,'studentResu1tFROM resultWHERE StudentResu1t>=95 &&studentResult<=100
     9 
    10 --模糊查询(区间)
    11 
    12 SELECT studentNo, studentResult` FROM resultWHERE StudentResult BETWEEN 95 AND 100
    13 
    14 --除了1000号学生之外的同学的成绩
    15 
    16 SELECT studentNo,'studentResult`FROM resultWHERE studentNo!=1000;
    17 
    18 -- !=not
    19 
    20 SELECT studentNo, 'studentResult`FROM resultWHERE NOT studentNo = 1000

    模糊查询:比较运算符(重要)

    -------------------------------LIKE-----------------------------

    1 --查询姓刘的同学
    2 
    3 -- like结合%(代表0到任意个字符) _(一个字符)
    4 
    5 SELECT `StudentNo`, 'StudentName` FROM `student`WHERE StudentName LIKE '%'

    1 -- 查询姓刘的,后面只有一个字
    2 SELECT `StudentNo`, 'StudentName` FROM `student`WHERE StudentName LIKE '刘_'

     

     ------------------------IN(具体的一个或者多个值)----------------------------

    1  -―查询1001,1002,1003号学员
    2  
    3  SELECT`StudentNo`, `StudentName` FROM‘student`WHERE StudentNo IN(1001,1002,1003);

     ------------null  not null-----------------

    1 --查询地址为空的学生null''
    2 
    3 SELECT `StudentNo`, `StudentName` FROM‘student VHERE address='' OR address IS NULL

    1 --查询没有有出生日期的同学为空
    2 
    3 SELECT`StudentNo`, `StudentName` FROM`studentWHERE `BornDateT IS NULL

     联表查询

     

    /★思路 /
    1.分析需求,分析查询的字段来自哪些表,(连接查询)

    2.确定使用哪种连接查询?7种 (分析需求,分析查询的字段来自哪些表,(连接查询)
    确定交叉点(这两个表中哪个数据是相同的) 
    判断的条件:学生表的中studentNo =成绩表studentNo

    --join(连接的表) on(判断的条件) 连接查询

    --where 等值查询

    1 SELECT s.studentNO,studentName , SubjectNo,StudentResult
    2 FROM student As s
    3 INNER JOIN result AS r
    4 on s.studentNO = r.studentNO
    1 -- Right Join
    2 
    3 
    4 SELECT s.studentNo,studentName , subjectNo ,studentResult
    5 FROM student s
    6 RIGHT JOIN result r
    7 ON s.studentNo = r.studentNO
    1 -- Left ]oin
    
     SELECT s.studentNo, studentName , subjectNo ,studentResult
    FROM student s
    LEFT JOIN result r ON s.studentNo = r.studentNO

    1 _―查询缺考的同学
    2 
    3 SELECT s.studentNO, studentName , SubjectNo, StudentResult
    4 FROM student s
    5 LEFT JOIN result r
    6 ON s.studentNO = r.studentNO
    7 WHERE StudentResult IS NULL

     总结:

     ---我要查询哪些数据 select....

    ---从哪几个表中查 FROM 表 xxx Join 连接的表  on 交叉条件

    ---假设要求为多张表查询,慢慢来,先查询两张表然后再慢慢增加

     1 --思考题(查询了参加考试的同学信息:学号,学生姓名,科目名,分数)

    *思路


    3 1.分析需求,分析查询的字段来自哪些表,student、result、 subject(连接查询 4 2.确定使用哪种连接查询?7种 5 确定交叉点(这两个表中哪个数据是相同的) 6 判断的条件:学生表的中 studentNo =成绩表 studentNo 7 8 SELECT s.studentNo, studentName , subjectName,'studentResult 9 FROM student s 10 RIGHT JOIN result r 11 ON r.studentNo = s.studentNo 12 iNNERJOIN `subjectt` sub 13 ON r.subjectNo = sub. subjectNo

    自连接:(了解)

    自己的表和自己的表连接,核心:一张表拆为两张一样的表即可

    1 -―查询父子信息
    2 
    3 
    4 SELECT a.`categoryName` AS '父栏目',b. `categoryName`AS '子栏目'
    5 FROM `category` AS a, `category` AS b
    6 WHERE a.`categoryid` = b.`pid`

    父类

    categoryid categoryName
    2 信息技术
    3 软件开发
    5 美术设计

    子类

    pid categoryid categoryName
    3 4 数据库
    2 8 办公信息
    3 6 web开发
    5 7 ps技术

    分组和过滤:

    1 -- 查询不同课程的平均分,最高分,最低分,平均分大于80
    2 -- 核心:(根据不同的课程分组)
    3 
    4 SELECT subjectname, AVG(studentresult) AS 平均分 ,MAX(studentresult) AS 最高分,MIN(studentresult) AS 最低分
    5 FROM result r
    6 INNER JOIN SUBJECT sub
    7 ON r.`subjectno` = sub.`subjectno`
    8 GROUP BY r.subjectno  -- 通过什么字段来分组
    9 HAVING 平均分>80   -- group by 之后不能用where 只能用having来过滤
  • 相关阅读:
    例如找出令人信服的权威C++中间malloc与new
    nRF905
    POJ 3280 间隔DP
    SharePoint管理中心来配置资源限制(大名单)
    C#值传递和按引用传递
    UVA 810
    hdu 4870 Rating(可能性DP&amp;高数消除)
    【Espruino】NO.06 关键是你的仆人(继续)
    Struts2_1_struts2建立一个执行环境
    kendoui仪表板和直方图 演示样本
  • 原文地址:https://www.cnblogs.com/YXBLOGXYY/p/14757199.html
Copyright © 2011-2022 走看看