DOL(Data Query Language 數據查詢語言)
-
查詢數據庫數據,如SELECT語句
-
簡單的單表查詢或多表的復雜查詢和嵌套查詢
-
是數據庫語言中最核心,最重要的語句
-
使用頻率最高的語句
創建學生表、班級表的代碼
- 創建一個school數據庫
USE `school`;-- 創建學生表
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;
插入的數據
-- 插入科目數據
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);
-- 插入學生數據 其余自行添加 這里只添加了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');
-- 插入成績數據 這里僅插入了一組,其余自行添加
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);
-- 插入年級數據
insert into `grade` (`gradeid`,`gradename`) values(1,'大一'),(2,'大二'),(3,'大三'),(4,'大四'),(5,'預科班');
SELECT:
SELECT完整語法:
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 `student`
-- 查詢指定列(學號,姓名)
SELECT `studentno` ,`studentname` FROM `student`
AS子句作為別名:
作用:
-
可給數據列取一個新別名
-
可給表取一個新別名
-
可把經計算或總結的結果用另一個新名稱來代替
-- 這里是為列取別名(當然as關鍵詞可以省略)
SELECT studentno AS 學號,studentname AS 姓名 FROM student;
-- 使用as也可以為表取別名
SELECT studentno AS 學號,studentname AS 姓名 FROM student AS s;
-- 使用as,為查詢結果取一個新名字
-- CONCAT()函數拼接字符串
SELECT CONCAT('姓名:',studentname) AS 新姓名 FROM student;
DISTINCT關鍵字:
作用 : 去掉SELECT查詢返回的記錄結果中重復的記錄 ( 返回所有列的值都相同 ) , 只返回一條
-- # 查看哪些同學參加了考試(學號) 去除重復項
SELECT * FROM result; -- 查看考試成績
SELECT studentno FROM result; -- 查看哪些同學參加了考試
SELECT DISTINCT studentno FROM result; -- 了解:DISTINCT 去除重復項 , (默認是ALL)
使用表達式的列
數據庫中的表達式:一般由文本值,列值,NULL,函數和操作符等組成
應用場景:
-
SELECT語句返回結果列中使用
-
SELECT語句中的ORDER BY , HAVING等子句中使用
-
DML語句中的 where 條件語句中使用表達式
-- select查詢中可以使用表達式
SELECT @@auto_increment_increment -- 查詢自增步長
SELECT VERSION()-- 查詢版本號
SELECT 100*3-1 AS 計算結果 -- 表達式
-- 學員考試成績集體提分一分查看
SELECT `studentno`,`studentresult`+1 AS 提分后 FROM `result`