觸動網(wǎng)站建設(shè)吳中seo頁面優(yōu)化推廣
一、單表查詢
素材: 表名:worker-- 表中字段均為中文,比如 部門號 工資 職工號 參加工作 等
CREATE TABLE `worker` (
?`部門號` int(11) NOT NULL,
?`職工號` int(11) NOT NULL,
?`工作時間` date NOT NULL,
?`工資` float(8,2) NOT NULL,
?`政治面貌` varchar(10) NOT NULL DEFAULT '群眾',
?`姓名` varchar(20) NOT NULL,
?`出生日期` date NOT NULL,
?PRIMARY KEY (`職工號`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
?1、顯示所有職工的基本信息。 ??
2、查詢所有職工所屬部門的部門號,不顯示重復(fù)的部門號。 ?
3、求出所有職工的人數(shù)。 ?
4、列出最高工和最低工資。 ??
5、列出職工的平均工資和總工資。 ??
6、創(chuàng)建一個只有職工號、姓名和參加工作的新表,名為工作日期表。?
7、顯示所有女職工的年齡。?
8、列出所有姓劉的職工的職工號、姓名和出生日期。
9、列出1960年以前出生的職工的姓名、參加工作日期。
10、列出工資在1000-2000之間的所有職工姓名。?
11、列出所有陳姓和李姓的職工姓名。
12、列出所有部門號為2和3的職工號、姓名、黨員否。 ?
13、將職工表worker中的職工按出生的先后順序排序。
14、顯示工資最高的前3名職工的職工號和姓名。?
15、求出各部門黨員的人數(shù)。?
16、統(tǒng)計各部門的工資和平均工資
17、列出總?cè)藬?shù)大于4的號和總?cè)藬?shù)。
mysql> CREATE TABLE `worker` (-> `部門號` int(11) NOT NULL,-> `職工號` int(11) NOT NULL,-> `工作時間` date NOT NULL,-> `工資` float(8,2) NOT NULL,-> `政治面貌` varchar(10) NOT NULL DEFAULT '群眾',-> `姓名` varchar(20) NOT NULL,-> `出生日期` date NOT NULL,-> PRIMARY KEY (`職工號`)-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
Query OK, 0 rows affected (0.01 sec)mysql> desc worker;
+--------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| 部門號 | int(11) | NO | | NULL | |
| 職工號 | int(11) | NO | PRI | NULL | |
| 工作時間 | date | NO | | NULL | |
| 工資 | float(8,2) | NO | | NULL | |
| 政治面貌 | varchar(10) | NO | | 群眾 | |
| 姓名 | varchar(20) | NO | | NULL | |
| 出生日期 | date | NO | | NULL | |
+--------------+-------------+------+-----+---------+-------+
7 rows in set (0.00 sec)mysql> INSERT INTO `worker` (`部門號`, `職工號`, `工作時間`, `工資`, `政治面貌`, `姓名`, `出生日期`) VALUES (101, 1001, '2015-5-4', 3500.00, '群眾', '張三', '1990-7-1');
INSERT INTO `worker` (`部門號`, `職工號`, `工作時間`, `工資`, `政治面貌`, `姓名`, `出生日 期`) VALUES (102, 1004, '2016-10-10', 5500.00, '群眾', '趙六', '1994-9-5');
INSERT INTO `worker` (`部門號`, `職工號`, `工作時間`, `工資`, `政治面貌`, `姓名`, `出生日 期`) VALUES (102, 1005, '2014-4-1', 4800.00, '黨員', '錢七', '1992-12-30');
INSERT INTO `worker` (`部門號`, `職工號`, `工作時間`, `工資`, `政治面貌`, `姓名`, `出生日 期`) VALUES (102, 1006, '2017-5-5', 4500.00, '黨員', '孫八', '1996-9-2');
Query OK, 1 row affected (0.03 sec)mysql> INSERT INTO `worker` (`部門號`, `職工號`, `工作時間`, `工資`, `政治面貌`, `姓名`, `出生日期`) VALUES (101, 1002, '2017-2-6', 3200.00, '團員', '李四', '1997-2-8');
Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO `worker` (`部門號`, `職工號`, `工作時間`, `工資`, `政治面貌`, `姓名`, `出生日期`) VALUES (102, 1003, '2011-1-4', 8500.00, '黨員', '王亮', '1983-6-8');
Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO `worker` (`部門號`, `職工號`, `工作時間`, `工資`, `政治面貌`, `姓名`, `出生日期`) VALUES (102, 1004, '2016-10-10', 5500.00, '群眾', '趙六', '1994-9-5');
Query OK, 1 row affected (0.01 sec)mysql> INSERT INTO `worker` (`部門號`, `職工號`, `工作時間`, `工資`, `政治面貌`, `姓名`, `出生日期`) VALUES (102, 1005, '2014-4-1', 4800.00, '黨員', '錢七', '1992-12-30');
Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO `worker` (`部門號`, `職工號`, `工作時間`, `工資`, `政治面貌`, `姓名`, `出生日期`) VALUES (102, 1006, '2017-5-5', 4500.00, '黨員', '孫八', '1996-9-2');
Query OK, 1 row affected (0.00 sec)mysql>
1、顯示所有職工的基本信息。
mysql> select * from worker;
+-----------+-----------+--------------+---------+--------------+--------+--------------+
| 部門號 | 職工號 | 工作時間 | 工資 | 政治面貌 | 姓名 | 出生日期 |
+-----------+-----------+--------------+---------+--------------+--------+--------------+
| 101 | 1001 | 2015-05-04 | 3500.00 | 群眾 | 張三 | 1990-07-01 |
| 101 | 1002 | 2017-02-06 | 3200.00 | 團員 | 李四 | 1997-02-08 |
| 102 | 1003 | 2011-01-04 | 8500.00 | 黨員 | 王亮 | 1983-06-08 |
| 102 | 1004 | 2016-10-10 | 5500.00 | 群眾 | 趙六 | 1994-09-05 |
| 102 | 1005 | 2014-04-01 | 4800.00 | 黨員 | 錢七 | 1992-12-30 |
| 102 | 1006 | 2017-05-05 | 4500.00 | 黨員 | 孫八 | 1996-09-02 |
+-----------+-----------+--------------+---------+--------------+--------+--------------+
6 rows in set (0.00 sec)mysql>
?2、查詢所有職工所屬部門的部門號,不顯示重復(fù)的部門號。
mysql> select distinct 部門號 from worker;
+-----------+
| 部門號 |
+-----------+
| 101 |
| 102 |
+-----------+
2 rows in set (0.00 sec)mysql>
?
? ?3、求出所有職工的人數(shù)。
mysql> select count(*) from worker;
+----------+
| count(*) |
+----------+
| 6 |
+----------+
1 row in set (0.00 sec)mysql>
??
?4、列出最高工和最低工資。 ??
mysql> select max(工資),min(工資) from worker;
+-------------+-------------+
| max(工資) | min(工資) |
+-------------+-------------+
| 8500.00 | 3200.00 |
+-------------+-------------+
1 row in set (0.00 sec)mysql>
?
5、列出職工的平均工資和總工資。
mysql> select sum(工資),avg(工資) from worker;
+-------------+-------------+
| sum(工資) | avg(工資) |
+-------------+-------------+
| 30000.00 | 5000.000000 |
+-------------+-------------+
1 row in set (0.00 sec)mysql>
??6、創(chuàng)建一個只有職工號、姓名和參加工作的新表,名為工作日期表。?
mysql> create table worktime select 職工號,姓名,工作時間 from worker;
Query OK, 6 rows affected (0.01 sec)
Records: 6 Duplicates: 0 Warnings: 0
mysql> select * from worktime;
+-----------+--------+--------------+
| 職工號 | 姓名 | 工作時間 |
+-----------+--------+--------------+
| 1001 | 張三 | 2015-05-04 |
| 1002 | 李四 | 2017-02-06 |
| 1003 | 王亮 | 2011-01-04 |
| 1004 | 趙六 | 2016-10-10 |
| 1005 | 錢七 | 2014-04-01 |
| 1006 | 孫八 | 2017-05-05 |
+-----------+--------+--------------+
6 rows in set (0.00 sec)mysql>
?
7、顯示所有女職工的年齡。
mysql> select 2019 - year(出生日期) as 年齡 from worker;
+--------+
| 年齡 |
+--------+
| 29 |
| 22 |
| 36 |
| 25 |
| 27 |
| 23 |
+--------+
6 rows in set (0.00 sec)mysql>
?8、列出所有姓劉的職工的職工號、姓名和出生日期。
mysql> select 職工號,姓名,出生日期 from worker-> where 姓名 like '王%';
+-----------+--------+--------------+
| 職工號 | 姓名 | 出生日期 |
+-----------+--------+--------------+
| 1003 | 王亮 | 1983-06-08 |
+-----------+--------+--------------+
1 row in set (0.00 sec)mysql>
9、列出1990年以前出生的職工的姓名、參加工作日期。
mysql> select 姓名,工作時間 from worker where 出生日期 < '1990-01-01';
+--------+--------------+
| 姓名 | 工作時間 |
+--------+--------------+
| 王亮 | 2011-01-04 |
+--------+--------------+
1 row in set (0.00 sec)mysql
10、列出工資在1000-2000之間的所有職工姓名。?
mysql> select 姓名 from worker where 工資 between 1000 and 2000;
+--------+
| 姓名 |
+--------+
| 趙六 |
+--------+
1 row in set (0.00 sec)mysql>
11、列出所有陳姓和李姓的職工姓名。
mysql> select 姓名 from worker where 姓名 like '張%' or 姓名 like '李%';
+--------+
| 姓名 |
+--------+
| 張三 |
| 李四 |
+--------+
2 rows in set (0.00 sec)mysql>
??
12、列出所有部門號為2和3的職工號、姓名、黨員否。
mysql> select 職工號,姓名,政治面貌 from worker where 部門號 like '%2' and 政治面貌 like '黨員';
+-----------+--------+--------------+
| 職工號 | 姓名 | 政治面貌 |
+-----------+--------+--------------+
| 1003 | 王亮 | 黨員 |
| 1005 | 錢七 | 黨員 |
| 1006 | 孫八 | 黨員 |
+-----------+--------+--------------+
3 rows in set (0.00 sec)mysql>
?13、將職工表worker中的職工按出生的先后順序排序。
mysql> select 姓名 from worker order by 出生日期;
+--------+
| 姓名 |
+--------+
| 王亮 |
| 張三 |
| 錢七 |
| 趙六 |
| 孫八 |
| 李四 |
+--------+
6 rows in set (0.00 sec)mysql>
??
14、顯示工資最高的前3名職工的職工號和姓名。
mysql> select 職工號,姓名 from worker order by 工資 desc limit 3;
+-----------+--------+
| 職工號 | 姓名 |
+-----------+--------+
| 1003 | 王亮 |
| 1004 | 趙六 |
| 1005 | 錢七 |
+-----------+--------+
3 rows in set (0.00 sec)mysql>
??
?15、求出各部門黨員的人數(shù)。
mysql> select 部門號,count(*) from worker where 政治面貌='黨員' group by 部門號;
+-----------+----------+
| 部門號 | count(*) |
+-----------+----------+
| 102 | 3 |
+-----------+----------+
1 row in set (0.00 sec)mysql>
??
?16、統(tǒng)計各部門的工資和平均工資
mysql> select 部門號,sum(工資),avg(工資) from worker group by 部門號 ;
+-----------+-------------+-------------+
| 部門號 | sum(工資) | avg(工資) |
+-----------+-------------+-------------+
| 101 | 6700.00 | 3350.000000 |
| 102 | 23300.00 | 5825.000000 |
+-----------+-------------+-------------+
2 rows in set (0.00 sec)mysql>
?17、列出總?cè)藬?shù)大于4的部門號和總?cè)藬?shù)。
mysql> select 部門號,count(*) from worker-> group by 部門號-> having count(*) > 3;
+-----------+----------+
| 部門號 | count(*) |
+-----------+----------+
| 102 | 4 |
+-----------+----------+
1 row in set (0.00 sec)mysql>
二、多表查詢
1.創(chuàng)建student和score表
CREATE ?TABLE student (
id ?INT(10) ?NOT NULL ?UNIQUE ?PRIMARY KEY ,
name ?VARCHAR(20) ?NOT NULL ,
sex ?VARCHAR(4) ,
birth ?YEAR,
department ?VARCHAR(20) ,
address ?VARCHAR(50)
);
創(chuàng)建score表。SQL代碼如下:
CREATE ?TABLE score (
id ?INT(10) ?NOT NULL ?UNIQUE ?PRIMARY KEY ?AUTO_INCREMENT ,
stu_id ?INT(10) ?NOT NULL ,
c_name ?VARCHAR(20) ,
grade ?INT(10)
);
2.為student表和score表增加記錄
向student表插入記錄的INSERT語句如下:
INSERT INTO student VALUES( 901,'張老大', '男',1985,'計算機系', '北京市海淀區(qū)');
INSERT INTO student VALUES( 902,'張老二', '男',1986,'中文系', '北京市昌平區(qū)');
INSERT INTO student VALUES( 903,'張三', '女',1990,'中文系', '湖南省永州市');
INSERT INTO student VALUES( 904,'李四', '男',1990,'英語系', '遼寧省阜新市');
INSERT INTO student VALUES( 905,'王五', '女',1991,'英語系', '福建省廈門市');
INSERT INTO student VALUES( 906,'王六', '男',1988,'計算機系', '湖南省衡陽市');
向score表插入記錄的INSERT語句如下:
INSERT INTO score VALUES(NULL,901, '計算機',98);
INSERT INTO score VALUES(NULL,901, '英語', 80);
INSERT INTO score VALUES(NULL,902, '計算機',65);
INSERT INTO score VALUES(NULL,902, '中文',88);
INSERT INTO score VALUES(NULL,903, '中文',95);
INSERT INTO score VALUES(NULL,904, '計算機',70);
INSERT INTO score VALUES(NULL,904, '英語',92);
INSERT INTO score VALUES(NULL,905, '英語',94);
INSERT INTO score VALUES(NULL,906, '計算機',90);
INSERT INTO score VALUES(NULL,906, '英語',85);1.查詢student表的所有記錄
2.查詢student表的第2條到4條記錄
3.從student表查詢所有學(xué)生的學(xué)號(id)、姓名(name)和院系(department)的信息
4.從student表中查詢計算機系和英語系的學(xué)生的信息
5.從student表中查詢年齡18~22歲的學(xué)生信息
6.從student表中查詢每個院系有多少人
7.從score表中查詢每個科目的最高分
8.查詢李四的考試科目(c_name)和考試成績(grade)
9.用連接的方式查詢所有學(xué)生的信息和考試信息
10.計算每個學(xué)生的總成績
11.計算每個考試科目的平均成績
12.查詢計算機成績低于95的學(xué)生信息
13.查詢同時參加計算機和英語考試的學(xué)生的信息
14.將計算機考試成績按從高到低進行排序
15.從student表和score表中查詢出學(xué)生的學(xué)號,然后合并查詢結(jié)果
16.查詢姓張或者姓王的同學(xué)的姓名、院系和考試科目及成績
17.查詢都是湖南的學(xué)生的姓名、年齡、院系和考試科目及成績
1.查詢student表的所有記錄
select * from student;
2.查詢student表的第2條到4條記錄
select * from student limit 1,3;
3.從student表查詢所有學(xué)生的學(xué)號(id)、姓名(name)和院系(department)的信息
select id,name,department from student;
4.從student表中查詢計算機系和英語系的學(xué)生的信息
select * from student where department='計算機系' or department='英語系';
5.從student表中查詢年齡28~32歲的學(xué)生信息
select * from student where (2022-birth+1) between 28 and 32;
6.從student表中查詢每個院系有多少人
select department,count(3) 人數(shù) from student group by department;
7.從score表中查詢每個科目的最高分
select c_name,max(grade) from score group by c_name;
8.查詢李四的考試科目(c_name)和考試成績(grade)
select c.c_name,c.grade from student d,score c where d.id=c.stu_id and d.name='李四';
9.用連接的方式查詢所有學(xué)生的信息和考試信息
select d.id,name,sex,birth,department,address,c_name,grade from student d,score c where d.id = c.stu_id
10.計算每個學(xué)生的總成績
select d.id,name,sum(grade) from student d,score c where d.id=c.stu_id group by id;
11.計算每個考試科目的平均成績
select c_name,avg(grade) from score group by c_name;
12.查詢計算機成績低于95的學(xué)生信息
select * from student where id in (select stu_id from score where c_name ='計算機' and grade < 95);
13.查詢同時參加計算機和英語考試的學(xué)生的信息
select * from student where id = any(select stu_id from score where stu_id in ( select stu_id from score where c_name = '計算機') and c_name = '英語');
14.將計算機考試成績按從高到低進行排序
select stu_id, grade from score where c_name= '計算機' order by grade desc;
15.從student表和score表中查詢出學(xué)生的學(xué)號,然后合并查詢結(jié)果
select id from student union select stu_id from score;
16.查詢姓張或者姓王的同學(xué)的姓名、院系和考試科目及成績
select student.id, name,sex,birth,department, address, c_name,grade from student, score where student.id=score.stu_id and (name like '張%' or name like '王%') ;
17.查詢都是湖南的學(xué)生的姓名、年齡、院系和考試科目及成績
select student.id, name,sex,birth,department, address, c_name,grade from student, score where student.id=score.stu_id and address like '湖南%' ;
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?