目录


增加

建表

mysql> create database test_exam;
Query OK, 1 row affected (0.00 sec)

mysql> use test_exam;
Database changed
mysql> create table exam (
    -> id int,
    -> name varchar(20),
    -> chinese decimal(3,1),
    -> math decimal(3,1),
    -> english decimal(3,1)
    -> );
Query OK, 0 rows affected (0.02 sec)

多行数据 全列插入

mysql> insert into exam values
    -> (1, '刘备', 90.1, 70.3, 40.9),
    -> (2, '关羽', 90.1, 60.3, 30.8),
    -> (3, '大乔', 99, 70.3, 30.8),
    -> (4, '吕布', 80.5, 50.3, 70.2),
    -> (5, '貂蝉', 80.5, 87.6, 90.3),
    -> (6, '孙尚香', 99, 12.1, 10),
    -> (7, '小乔', 98, 99, 4.3),
    -> (8, '孙权', 85, 77, 87);
Query OK, 8 rows affected (0.01 sec)
Records: 8  Duplicates: 0  Warnings: 0

多行数据 指定列插入

mysql> insert into exam (id, name) values (9, '孙策'), (10, '刘禅');
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

查询

全列查询

  • 注意:这种方式只限测试方式查询,千万不能再生产环境上的服务器执行这样的sql

最基础的查找,全列查找,直接把一个表所有的列,和所有的行都查询出来~
语法:select * from 表名* 叫做"通配符",表示一个表的所有列

mysql> select * from exam;
+------+-----------+---------+------+---------+
| id   | name      | chinese | math | english |
+------+-----------+---------+------+---------+
|    1 | 刘备      |    90.1 | 70.3 |    40.9 |
|    2 | 关羽      |    90.1 | 60.3 |    30.8 |
|    3 | 大乔      |    99.0 | 70.3 |    30.8 |
|    4 | 吕布      |    80.5 | 50.3 |    70.2 |
|    5 | 貂蝉      |    80.5 | 87.6 |    90.3 |
|    6 | 孙尚香    |    99.0 | 12.1 |    10.0 |
|    7 | 小乔      |    98.0 | 99.0 |     4.3 |
|    8 | 孙权      |    85.0 | 77.0 |    87.0 |
|    9 | 孙策      |    NULL | NULL |    NULL |
|   10 | 刘禅      |    NULL | NULL |    NULL |
+------+-----------+---------+------+---------+
10 rows in set (0.00 sec)

把一个表里面的所有行和所有列都查找出到,查找的结果是一个“临时表”,之前我们说的 数据库 的表都是在硬盘上的,而此处的这个查询结果 临时表 ,不是在硬盘上,而是在内存中,随着进行了输出之后,数据也就被释放了~
注意:

select * from 表名 这个操作也是一个 危险操作!
如果在生产环境的服务器上,执行,很可能带来灾难!所以我们以后出去工作的时候一i的那个要注意!!!


指定列查询

语法:select 列名,列名.... from 表名;

【MySQL】—— 数据库 增删查改 练习(基础)_基础

查询字段为表达式

mysql> select id, name, english + 10 from exam;
+------+-----------+--------------+
| id   | name      | english + 10 |
+------+-----------+--------------+
|    1 | 刘备      |         50.9 |
|    2 | 关羽      |         40.8 |
|    3 | 大乔      |         40.8 |
|    4 | 吕布      |         80.2 |
|    5 | 貂蝉      |        100.3 |
|    6 | 孙尚香    |         20.0 |
|    7 | 小乔      |         14.3 |
|    8 | 孙权      |         97.0 |
|    9 | 孙策      |         NULL |
|   10 | 刘禅      |         NULL |
+------+-----------+--------------+
10 rows in set (0.00 sec)
mysql> select id, name, chinese + math + english from exam;
+------+-----------+--------------------------+
| id   | name      | chinese + math + english |
+------+-----------+--------------------------+
|    1 | 刘备      |                    201.3 |
|    2 | 关羽      |                    181.2 |
|    3 | 大乔      |                    200.1 |
|    4 | 吕布      |                    201.0 |
|    5 | 貂蝉      |                    258.4 |
|    6 | 孙尚香    |                    121.1 |
|    7 | 小乔      |                    201.3 |
|    8 | 孙权      |                    249.0 |
|    9 | 孙策      |                     NULL |
|   10 | 刘禅      |                     NULL |
+------+-----------+--------------------------+
10 rows in set (0.00 sec)

注意: 临时表中的结果的数据类型不一定和原始的表的数据类型完全一致,临时表的类型会自动的适应,保证计算结果是i正确的


查询字段 名字重定义

mysql> select id, name, chinese + math + english as totle from exam;
+------+-----------+-------+
| id   | name      | totle |
+------+-----------+-------+
|    1 | 刘备      | 201.3 |
|    2 | 关羽      | 181.2 |
|    3 | 大乔      | 200.1 |
|    4 | 吕布      | 201.0 |
|    5 | 貂蝉      | 258.4 |
|    6 | 孙尚香    | 121.1 |
|    7 | 小乔      | 201.3 |
|    8 | 孙权      | 249.0 |
|    9 | 孙策      |  NULL |
|   10 | 刘禅      |  NULL |
+------+-----------+-------+
10 rows in set (0.00 sec)

去重 distinct

  • 使用去重distinct时,所有的列都必须放在distinct的后面

语法select distinct 列名 from 表名;

mysql> select distinct chinese from exam;
+---------+
| chinese |
+---------+
|    90.1 |
|    99.0 |
|    80.5 |
|    98.0 |
|    85.0 |
|    NULL |
+---------+
6 rows in set (0.01 sec)

排序 order by

  • asc升序 desc降序 什么都不加 默认asc

语法select 列名... from 表名 order by 列名 asc/desc;

查询同学及总分,由高到低

-- 查询同学及总分,由高到低
mysql> select id, name, chinese + math + english as totle from exam order by totle desc;
+------+-----------+-------+
| id   | name      | totle |
+------+-----------+-------+
|    5 | 貂蝉      | 258.4 |
|    8 | 孙权      | 249.0 |
|    1 | 刘备      | 201.3 |
|    7 | 小乔      | 201.3 |
|    4 | 吕布      | 201.0 |
|    3 | 大乔      | 200.1 |
|    2 | 关羽      | 181.2 |
|    6 | 孙尚香    | 121.1 |
|    9 | 孙策      |  NULL |
|   10 | 刘禅      |  NULL |
+------+-----------+-------+
10 rows in set (0.00 sec)

查询同学各门成绩,依次按 数学降序,英语升序,语文升序的方式显示

-- 查询同学各门成绩,依次按 数学降序,英语升序,语文升序的方式显示
mysql> select * from exam order by chinese desc, math desc, english desc;
+------+-----------+---------+------+---------+
| id   | name      | chinese | math | english |
+------+-----------+---------+------+---------+
|    3 | 大乔      |    99.0 | 70.3 |    30.8 |
|    6 | 孙尚香    |    99.0 | 12.1 |    10.0 |
|    7 | 小乔      |    98.0 | 99.0 |     4.3 |
|    1 | 刘备      |    90.1 | 70.3 |    40.9 |
|    2 | 关羽      |    90.1 | 60.3 |    30.8 |
|    8 | 孙权      |    85.0 | 77.0 |    87.0 |
|    5 | 貂蝉      |    80.5 | 87.6 |    90.3 |
|    4 | 吕布      |    80.5 | 50.3 |    70.2 |
|    9 | 孙策      |    NULL | NULL |    NULL |
|   10 | 刘禅      |    NULL | NULL |    NULL |
+------+-----------+---------+------+---------+
10 rows in set (0.00 sec)