赞
踩
2024.4.1 Monday
4.1.1.查询数据库数据 , 如SELECT语句
4.1.2.简单 的单表查询或多表的复杂查询和嵌套查询
4.1.3.是数据库语言中最核心,最重要的语句
4.1.4.使用频率最高的语句
这里开始的数据库名称为‘p16select’
建表查询相关代码如下:(数据库名称为‘school’) create database if not exists `school`; -- 创建一个school数据库 use `school`;-- 创建学生表 drop table if exists `student`; create table `student`( `studentno` int(4) not null comment '学号', `loginpwd` varchar(20) default null, `studentname` varchar(20) default null comment '学生姓名', `sex` tinyint(1) default null comment '性别,0或1', `gradeid` int(11) default null comment '年级编号', `phone` varchar(50) not null comment '联系电话,允许为空', `address` varchar(255) not null comment '地址,允许为空', `borndate` datetime default null comment '出生时间', `email` varchar (50) not null comment '邮箱账号允许为空', `identitycard` varchar(18) default null comment '身份证号', primary key (`studentno`), unique key `identitycard`(`identitycard`), key `email` (`email`) )engine=myisam default charset=utf8; -- 创建年级表 drop table if exists `grade`; create table `grade`( `gradeid` int(11) not null auto_increment comment '年级编号', `gradename` varchar(50) not null comment '年级名称', primary key (`gradeid`) ) engine=innodb auto_increment = 6 default charset = utf8; -- 创建科目表 drop table if exists `subject`; create table `subject`( `subjectno`int(11) not null auto_increment comment '课程编号', `subjectname` varchar(50) default null comment '课程名称', `classhour` int(4) default null comment '学时', `gradeid` int(4) default null comment '年级编号', primary key (`subjectno`) )engine = innodb auto_increment = 19 default charset = utf8; -- 创建成绩表 drop table if exists `result`; create table `result`( `studentno` int(4) not null comment '学号', `subjectno` int(4) not null comment '课程编号', `examdate` datetime not null comment '考试日期', `studentresult` int (4) not null comment '考试成绩', key `subjectno` (`subjectno`) )engine = innodb default charset = utf8; #3 -- 插入学生数据 其余自行添加 这里只添加了2行 insert into `student` (`studentno`,`loginpwd`,`studentname`,`sex`,`gradeid`,`phone`,`address`,`borndate`,`email`,`identitycard`) values (1000,'123456','张伟',0,2,'13800001234','北京朝阳','1980-1-1','text123@qq.com','123456198001011234'), (1001,'123456','赵强',1,3,'13800002222','广东深圳','1990-1-1','text111@qq.com','123456199001011233'), (1002,'123456','刘福',0,4,'13800002333','广东深圳','1990-1-1','text211@qq.com','123456199091011232'), (1003,'123456','刘大福',0,5,'13800002233','广东深圳','1990-1-1','text221@qq.com','123456199091011332'), (1004,'123456','吴福',0,5,'13800003333','北京',NULL,'text222@qq.com','123456199991011332'); -- 插入成绩数据 这里仅插入了一组,其余自行添加 insert into `result`(`studentno`,`subjectno`,`examdate`,`studentresult`) values (1000,1,'2013-11-11 16:00:00',85), (1000,2,'2013-11-12 16:00:00',70), (1000,3,'2013-11-11 09:00:00',68), (1000,4,'2013-11-13 16:00:00',98), (1000,5,'2013-11-14 16:00:00',58), (1001,1,'2013-11-11 16:00:00',70), (1001,2,'2013-11-12 16:00:00',0), (1001,3,'2013-11-11 09:00:00',80); -- 插入年级数据 insert into `grade` (`gradeid`,`gradename`) values(1,'大一'),(2,'大二'),(3,'大三'),(4,'大四'),(5,'预科班'); #4 -- 插入科目数据 insert into `subject`(`subjectno`,`subjectname`,`classhour`,`gradeid`)values (1,'高等数学-1',110,1), (2,'高等数学-2',110,2), (3,'高等数学-3',100,3), (4,'高等数学-4',130,4), (5,'C语言-1',110,1), (6,'C语言-2',110,2), (7,'C语言-3',100,3), (8,'C语言-4',130,4), (9,'Java程序设计-1',110,1), (10,'Java程序设计-2',110,2), (11,'Java程序设计-3',100,3), (12,'Java程序设计-4',130,4), (13,'数据库结构-1',110,1), (14,'数据库结构-2',110,2), (15,'数据库结构-3',100,3), (16,'数据库结构-4',130,4), (17,'C#基础',130,1); #5 CREATE TABLE `category`( `categoryid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主题id', -- 不同的名字算不一样的id `pid` INT(10) NOT NULL COMMENT '父id', -- 大类的第x类 `categoryname` VARCHAR(50) NOT NULL COMMENT '主题名字', PRIMARY KEY (`categoryid`) ) ENGINE=INNODB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8; INSERT INTO `category` (`categoryid`, `pid`, `categoryname`) VALUES ('2','1','信息技术'), ('3','1','软件开发'), ('5','1','美术设计'), ('4','3','数据库'), ('8','2','办公信息'), ('6','3','web开发'), ('7','5','ps技术');
SELECT [ALL | DISTINCT]
{* | table.* | [table.field1[as alias1][,table.field2[as alias2]][,...]]}
FROM table_name [as table_alias]
[left | right | inner join table_name2] -- 联合查询
[WHERE ...] -- 指定结果需满足的条件
[GROUP BY ...] -- 指定结果按照哪几个字段来分组
[HAVING] -- 过滤分组的记录必须满足的次要条件
[ORDER BY ...] -- 指定查询记录按一个或多个条件排序
[LIMIT {[offset,]row_count | row_countOFFSET offset}];
-- 指定查询的记录从哪条至哪条
-- 查询全部的某某 SELECT 字段/* FROM 表
SELECT * FROM student
SELECT * FROM result
-- 查询指定字段
SELECT `StudentNo`,`StudentName` FROM student
-- 给查询的字段/结果/查询的这个表起别名(不用原本的字段名) AS
SELECT `StudentNo` AS 学号,`StudentName` AS 姓名 FROM student AS STU
-- 使用函数拼接字符串 Concat(A, B)
SELECT CONCAT('姓名:',StudentName) AS 新格式 FROM student
-- 查询有参加过考试的同学 -> 通过考试‘有’成绩来选择
SELECT * FROM result
-- 查询有哪些同学参加过考试
SELECT `StudentNo` FROM result
-- 对于‘参加过’考试的同学StudentNo数据去重
SELECT DISTINCT `StudentNo` FROM result
-- 查询系统版本(函数)
SELECT VERSION()
-- 计算数学算式结果(表达式)
SELECT 1021*3-999 AS CAL_RESULT
-- 查询自增步长(变量)
SELECT @@AUTO_INCREMENT_INCREMENT
-- 查看学员考试成绩加了1分的结果
SELECT `StudentNo`, `StudentResult`+1 AS 显示时加一分 FROM result
搜索条件可由一个或多个逻辑表达式组成 , 结果一般为布尔值(真或假)
#where条件语句
SELECT studentNo, StudentResult FROM result -- 查询全部的
#逻辑查询
-- 查询StudentResult在95~100之间的
SELECT studentNo, StudentResult FROM result
WHERE StudentResult >= 95 AND StudentResult <= 100
-- 用AND或者&&都可以
SELECT studentNo, StudentResult FROM result
WHERE StudentResult >= 95 && StudentResult <= 100
-- 用‘模糊查询’(区间查询)也可以
SELECT studentNo, StudentResult FROM result
WHERE StudentResult BETWEEN 95 AND 100
-- 查询除了1000号手机以外的同学的成绩
SELECT studentNo, StudentResult FROM result
WHERE studentNo != 1000; -- 或者<>
SELECT studentNo, StudentResult FROM result
WHERE NOT studentNo = 1000; -- 注意NOT的位置
#模糊查询
-- 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 '%强%'
-- 查询姓名中含有特殊字符的需要使用转义符号 '\'
-- 自定义转义符关键字: ESCAPE ':'
-- IN 具体的一个或多个值 --
-- 查询1001,1002,1003号学员
SELECT `studentNo`,`StudentName` FROM `student`
WHERE StudentNo IN (1001,1002,1003);
-- 和以下OR语句作用相同
SELECT `studentNo`,`StudentName` FROM `student`
WHERE StudentNo = 1001 OR StudentNo = 1002 OR StudentNo = 1003
-- 查询在北京朝阳的学生(同理,多个地点满足一个即可时,就在‘’后加逗号继续写上其他的可选值)
SELECT `studentNo`,`StudentName`,`address` FROM `student`
WHERE `Address` IN ('北京朝阳')
-- NULL NOT NULL --
-- 查询地址为空的学生(null或者'')
SELECT `studentNo`,`StudentName`,`address` FROM `student`
WHERE address = '' OR address IS NULL
-- 查询有出生日期的同学(borndate不为空)
SELECT `studentNo`,`StudentName`,`borndate` FROM `student`
WHERE borndate IS NOT NULL
-- 查询没有出生日期的同学(borndate为空)
SELECT `studentNo`,`StudentName`,`borndate` FROM `student`
WHERE borndate IS NULL
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。