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# 从服务器下载文件
    不能使用联机NuGet 程序包
    NPOI之Excel——合并单元格、设置样式、输入公式
    jquery hover事件中 fadeIn和fadeOut 效果不能及时停止
    UVA 10519 !! Really Strange !!
    UVA 10359 Tiling
    UVA 10940 Throwing cards away II
    UVA 10079 Pizze Cutting
    UVA 763 Fibinary Numbers
    UVA 10229 Modular Fibonacci
  • 原文地址:https://www.cnblogs.com/YXBLOGXYY/p/14757199.html
Copyright © 2011-2022 走看看