使用DQL命令查询数据(一)

DQL语言

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

指定查询字段

查询表中所有的数据列结果,采用“*”符号

select   *   from student;

可指定查询的结果数据列

如只查询student表中的学号、姓名、电话

SELECT     StudentNo, StudentName, Phone  FROM  student;

如区分连接查询时两个表有同名的字段

SELECT     student.StudentNo, StudentName, StudentResult FROM  student,result;

AS子句

可给数据列取一个新别名

SELECT   StudentNo   AS “学号”   FROM   student;

可给表取一个新别名

SELECT   a.StudentNo   FROM   student AS  a;

可把经计算或总结的结果用另外一个新名称来代替

SELECT   Phone+1  AS  Tel    FROM   student;

AS 也可省略不写

DISTINCT关键字的使用

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

SELECT     DISTINCT   字段名1, 字段名2...     FROM   表名

ALL 关键字是默认的,返回所有的记录,与之相反

使用表达式的列

表达式一般由文本值、列值、NULL、函数和操作符等组成

SELECT语句返回结果列中使用
SELECT语句的ORDER BY、HAVING等子句中使用
DML语句中的where条件语句中使用表达式

在SQL语句中使用表达式

返回的列中使用,如

SELECT  version() ,   100*3        #返回MySQL版本和计算结果
SELECT  SubjectName “课程名称”, ClassHour+10  AS “新学时”  FROM subject;

#给返回结果中的课时都加10个课时

避免SQL返回结果中包含“ .”,“*”和括号等干扰开发语言程序,如

SELECT   version() as  MySQL_V , 123.44*100  AS  EXPRESSION;

#返回结果不会与后台开发程序发生混淆

where条件语句

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

逻辑操作符

在这里插入图片描述

比较操作符

在这里插入图片描述
1、数值数据类型的记录之间才能进行算术运算
2、相同数据类型的数据之间才能进行比较

BETWEEN AND范围查询

根据一个范围值来检索

SELECT  字段列1,字段2 ,…FROM 表名 WHERE   字段x  BETWEEN  值1 AND  值2  

等同于 >= 和 <= 联合使用
#查询课程表中课时在110和120之间的所有记录

 SELECT  *  FROM  subject  WHERE ClassHour   BETWEEN  110   AND  120;

等同于:

 SELECT  *  FROM  subject  WHERE ClassHour >= 110  AND  ClassHour <=120;

LIKE模糊查询

在WHERE子句中,使用LIKE关键字进行模糊查询
与“%”一起使用,表示匹配0或任意多个字符
与“_”一起使用,表示匹配单个字符
#查询包含“数学”的所有课程

SELECT   *  FROM subject WHERE SubjectName  LIKE  "%数学%";

#查询所有姓名为“李**”三个字的学生信息

SELECT  StudentNo,StudentName FROM student  
  WHERE StudentName LIKE "李__";

使用IN进行范围查询

SELECT 字段列1,字段2 ,…FROM 表名 WHERE 字段x IN ( 值1,值2,值3…)
查询的字段x的值,至少与括号中的一个值相同
多个值之间用英文逗号隔开

 SELECT  *  FROM  subject  where    ClassHour = 100  OR ClassHour =110 OR ClassHour  = 120;  #普通处理方式
SELECT  *  FROM  subject  where ClassHour  IN ( 100, 110,120 );

#使用IN进行查询方式,更为简洁,效率更高

NULL空值条件查询

NULL代表“无值”
区别于零值0和空符串“”
只能出现在定义允许为NULL的字段
须使用 IS NULL 或 IS NOT NULL 比较操作符去比较

连接查询(多表查询)

如需要多张数据表的数据进行查询,则可通过连接运算符实现多个查询

内连接 ( inner join)

INNER JOIN内连接

在表中至少一个匹配时,则返回记录

SELECT   字段1,字段2,…  FROM  table_1 
INNER  JOIN   table_2    ON  table_1.字段x   =  table_2.字段y;

#INNER JOIN 与 JOIN 是相同的;
#如table_1中的行在table_2中没有匹配,则不返回;

等值和非等值的连接查询

与单表查询类似,都是SELECT语句
把多个表放到FROM后,并用逗号隔开
可使用AS关键字取别名,便于引用
如无重名查询字段则可省略数据表的指定
#要求:从subject和grade数据表查询课程名称和所属年级名称

非等值连接查询
SELECT  SubjectName, GradeName  FROM  subject,  grade;  
等值查询
SELECT  SubjectName, GradeName  FROM  subject,  grade 
WHERE  subject.GradeID = grade.GradeID;  

自身连接查询

数据表与自身进行连接

从一个包含栏目ID,栏目名称和父栏目ID的表中,查询父栏目名称和其子栏目名称,表结构如下

CREATE TABLE IF NOT EXISTS test0819(
    ColumnId INT(4)  PRIMARY KEY,
    ColumnName VARCHAR(50),
    Cid INT(4)
);
INSERT INTO test0819 VALUES (1,'语文',6);
INSERT INTO test0819 VALUES (2,'数学',5);
INSERT INTO test0819 VALUES (3,'英语',4);
INSERT INTO test0819 VALUES (4,'chinese',3);
INSERT INTO test0819 VALUES (5,'math',2);
INSERT INTO test0819 VALUES (6,'english',1);
SELECT c1.ColumnName AS '父栏目名称',c2.ColumnName AS '子栏目名称' FROM `test0819` c1
LEFT JOIN test0819 c2 ON c1.ColumnId=c2.Cid WHERE c1.ColumnId BETWEEN 1 AND 3 ;

外连接 ( out join )

左连接(LEFT JOIN)

从左表(table_1)中返回所有的记录,即便在右(table_2)中没有匹配的行

SELECT   字段1,字段2,… FROM table_1 
LEFT  [ OUTER ]   JOIN   table_2    ON  table_1.字段x   =  table_2.字段y;

右连接 ( RIGHT JOIN)

从右表(table_2)中返回所有的记录,即便在左(table_1)中没有匹配的行

SELECT   字段1,字段2,… FROM table_1 
RIGHT   [ OUTER ]   JOIN   table_2    ON  table_1.字段x   =  table_2.字段y;

不同的SQL JOIN对比

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值