1. 程式人生 > 其它 >【資料庫MySQL】練習---簡單的單表查詢

【資料庫MySQL】練習---簡單的單表查詢

技術標籤:資料庫MySQLmysql

一、準備資料

1、建立資料庫

mysql> create database if not exists stu character set utf8;
Query OK, 1 row affected, 1 warning (0.00 sec)

2、選擇資料庫並建立表

#選擇stu資料庫
mysql> use stu;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select database();
+------------+
| database() |
+------------+
| stu        |
+------------+
1 row in set (0.00 sec)

#建立student表

CREATE TABLE `student` (
  `stu_id` bigint(11) unsigned NOT NULL COMMENT '學號',
  `stu_name` char(12) NOT NULL COMMENT '姓名',
  `stu_sex` enum('男','女') DEFAULT NULL COMMENT '性別',
  `stu_age` tinyint(255) unsigned DEFAULT NULL COMMENT '年齡',
  `stu_major` char(9) DEFAULT NULL COMMENT '專業',
  `stu_college` char(12) DEFAULT NULL COMMENT '學院',
  PRIMARY KEY (`stu_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


#建立course表
CREATE TABLE `course` (
  `cs_id` int(11) NOT NULL COMMENT '課程編號',
  `cs_name` varchar(50) NOT NULL COMMENT '課程名稱',
  `cs_credit` tinyint(255) unsigned DEFAULT NULL COMMENT '課程學分',
  `cs_type` char(12) DEFAULT NULL COMMENT '課程類別',
  `cs_depart` char(6) DEFAULT NULL COMMENT '院系名稱',
  PRIMARY KEY (`cs_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3、在表中插入資料記錄

#在student表中插入資料

insert  into `student`(`stu_id`,`stu_name`,`stu_sex`,`stu_age`,`stu_major`,`stu_college`) values (201804550101,'郭奎','男',22,'計科','信工學院'),(201804550102,'呂宇航','男',18,'計科','信工學院'),(201804550103,'張豪輝','女',19,'計科','信工學院'),(201804550107,'丁志傑','男',17,'金融學','金貿學院'),(201804550109,'範偉','男',19,'金融學','金貿學院'),(201804550116,'張依婷','女',17,'大資料','信工學院'),(201804550120,'張維','男',19,'計科','信工學院'),(201804550121,'朱柳陽','女',20,'計科','信工學院'),(201804550144,'譚兵炎','男',20,'大資料','信工學院'),(201804550153,'楊志強','男',17,'大資料','信工學院');

#在course表中插入資料
insert  into `course`(`cs_id`,`cs_name`,`cs_credit`,`cs_type`,`cs_depart`) values (5200313,'資料庫原理及應用',4,'核心專業','信工'),(5203314,'計算機導論',4,'通識教育','信工'),(5219314,'資料結構',5,'專業核心','信工'),(5223013,'大學物理',4,'專業基礎','信工'),(5227614,'畢業實習',4,'集中實踐','信工'),(5230912,'雲端計算',2,'共同選修','信工'),(5236212,'機器學習',2,'共同選修','信工'),(5237514,'c語言',4,'專業基礎','信工'),(5245112,'區塊鏈',2,'任意選修','信工'),(7200422,'智慧財產權法',2,'任意選修','文法'),(20201833,'概率論',3,'專業基礎','基礎'),(20202336,'高等數學',6,'專業基礎','基礎'),(29299131,'勞動教育',1,'集中實踐','學務');

4、查看錶結構和表資料

mysql> desc student;
+-------------+-----------------------+------+-----+---------+-------+
| Field       | Type                  | Null | Key | Default | Extra |
+-------------+-----------------------+------+-----+---------+-------+
| stu_id      | bigint(11) unsigned   | NO   | PRI | NULL    |       |
| stu_name    | char(12)              | NO   |     | NULL    |       |
| stu_sex     | enum('男','女')       | YES  |     | NULL    |       |
| stu_age     | tinyint(255) unsigned | YES  |     | NULL    |       |
| stu_major   | char(9)               | YES  |     | NULL    |       |
| stu_college | char(12)              | YES  |     | NULL    |       |
+-------------+-----------------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

mysql> select * from student;
+--------------+-----------+---------+---------+-----------+--------------+
| stu_id       | stu_name  | stu_sex | stu_age | stu_major | stu_college  |
+--------------+-----------+---------+---------+-----------+--------------+
| 201804550101 | 郭奎      | 男      |      22 | 計科      | 信工學院     |
| 201804550102 | 呂宇航    | 男      |      18 | 計科      | 信工學院     |
| 201804550103 | 張豪輝    | 女      |      19 | 計科      | 信工學院     |
| 201804550107 | 丁志傑    | 男      |      17 | 金融學    | 金貿學院     |
| 201804550109 | 範偉      | 男      |      19 | 金融學    | 金貿學院     |
| 201804550116 | 張依婷    | 女      |      17 | 大資料    | 信工學院     |
| 201804550120 | 張維      | 男      |      19 | 計科      | 信工學院     |
| 201804550121 | 朱柳陽    | 女      |      20 | 計科      | 信工學院     |
| 201804550144 | 譚兵炎    | 男      |      20 | 大資料    | 信工學院     |
| 201804550153 | 楊志強    | 男      |      17 | 大資料    | 信工學院     |
+--------------+-----------+---------+---------+-----------+--------------+
10 rows in set (0.00 sec)

mysql> desc course;
+-----------+-----------------------+------+-----+---------+-------+
| Field     | Type                  | Null | Key | Default | Extra |
+-----------+-----------------------+------+-----+---------+-------+
| cs_id     | int(11)               | NO   | PRI | NULL    |       |
| cs_name   | varchar(50)           | NO   |     | NULL    |       |
| cs_credit | tinyint(255) unsigned | YES  |     | NULL    |       |
| cs_type   | char(12)              | YES  |     | NULL    |       |
| cs_depart | char(6)               | YES  |     | NULL    |       |
+-----------+-----------------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

mysql> select * from course;
+----------+--------------------------+-----------+--------------+-----------+
| cs_id    | cs_name                  | cs_credit | cs_type      | cs_depart |
+----------+--------------------------+-----------+--------------+-----------+
|  5200313 | 資料庫原理及應用         |         4 | 核心專業     | 信工      |
|  5203314 | 計算機導論               |         4 | 通識教育     | 信工      |
|  5219314 | 資料結構                 |         5 | 專業核心     | 信工      |
|  5223013 | 大學物理                 |         4 | 專業基礎     | 信工      |
|  5227614 | 畢業實習                 |         4 | 集中實踐     | 信工      |
|  5230912 | 雲端計算                   |         2 | 共同選修     | 信工      |
|  5236212 | 機器學習                 |         2 | 共同選修     | 信工      |
|  5237514 | c語言                    |         4 | 專業基礎     | 信工      |
|  5245112 | 區塊鏈                   |         2 | 任意選修     | 信工      |
|  7200422 | 智慧財產權法               |         2 | 任意選修     | 文法      |
| 20201833 | 概率論                   |         3 | 專業基礎     | 基礎      |
| 20202336 | 高等數學                 |         6 | 專業基礎     | 基礎      |
| 29299131 | 勞動教育                 |         1 | 集中實踐     | 學務      |
+----------+--------------------------+-----------+--------------+-----------+
13 rows in set (0.01 sec)


二、查詢

1.查詢全部課程的資訊。

mysql> select * from course;


2.查詢信工學院開設的課程名、課程號及學分。

mysql> select cs_id,cs_name,cs_credit
    -> from course
    -> where cs_depart='信工';


3.查詢學分超過3學分的課程程式碼、課程名和開課單位。

mysql> select cs_id,cs_name,cs_depart
    -> from course
    -> where cs_credit>3;


4.查詢計科專業和大資料專業的學生資訊。

mysql> select * from student
    -> where stu_major='計科' or stu_major='大資料';


5.查詢不是信工學院的學生姓名和學號。

mysql> select stu_id,stu_name
    -> from student
    -> where stu_college!='信工學院';


6.查詢年齡是17,18,19的學生姓名和專業。

mysql> select stu_name,stu_major
    -> from student
    -> where stu_age in(17,18,19);


7.查詢學分在2到4之間課程的資訊。

mysql> select * from course
    -> where cs_credit between 2 and 4;


8.查詢課程名稱中帶“資料”的課程名、課程號及開課單位。

mysql> select cs_name,cs_id,cs_depart
    -> from course
    -> where cs_name like '%資料%';


9.查詢信工學院的的專業有哪些。

mysql> select distinct stu_major
    -> from student
    -> where stu_college like '信工%';


10.查詢年齡為空的學生資訊。

mysql> select * from student
    -> where stu_age is null;


11.查詢不是信工學院開設的集中實踐課的開課單位和課程名稱。

mysql> select cs_depart,cs_name 
    -> from course
    -> where cs_depart!='信工' and cs_type='集中實踐';


12.查詢信工學院開設的課程的型別有哪些。

mysql> select distinct cs_type 
    -> from course
    -> where cs_depart='信工';


13.查詢學生所在的專業個數。

mysql> select count(distinct stu_major) 專業個數
    -> from student;


14.查詢信工學院開設的課程的平均學分。

mysql> select avg(cs_credit) 平均學分
    -> from course
    -> where cs_depart='信工';


15.查詢學生的資訊,查詢結果按姓名升序排序。

mysql> select * from student
    -> order by stu_name;


16.查詢每個專業的學生的最大年齡、最小年齡和平均年齡,查詢結果按平均年齡降序排列。

mysql> select stu_major 專業,max(stu_age) 最大年齡,min(stu_age) 最小年齡,avg(stu_age) 平均年齡
    -> from student
    -> group by stu_major
    -> order by avg(stu_major);


17.查詢每個開課單位開設的課程門數的,查詢結果按課程門數升序排列。

mysql> select cs_depart 專業,count(cs_name) 課程數
    -> from course
    -> group by cs_depart
    -> order by 課程數;


18.查詢單位開課門數少於2門的開課單位和課程名稱。

mysql> select cs_depart 系別,cs_name 課程,count(cs_name) 開課門數
    -> from course
    -> group by cs_depart
    -> having 開課門數<2;