MySQL-1-基础语法练习

本文通过实战演练的方式介绍了MySQL的基础命令,包括DDL、DML、DQL等,通过具体实例加深了对MySQL基本语法的理解。

话说:

各位读者朋友,上一篇我们温故了HTML基础标签,这一篇也轻松一下,温习一下MySQL的基础命令。

现在是21:17分,我们通过cmd命令方式,通过具体例子,尽可能全的来温习基本命令,也许你觉得太基础,但是基本功永远是基本功;就如同“野蛮”的体魄永远是奋斗的前提。

难度:★☆☆☆☆
练习工具:cmd窗口+Notepad++
用时:1H左右

目录


一、效果图
二、DDL
三、DML
四、DQL
五、总结
六、下期预告


如果有一天,你对基本语句陌生了,打开它,从头到尾练习几遍,对基础知识就会有一个系统而快速的回顾,这是主要目的,不怕遗忘,怕的是遗忘后不作为。

MySQL数据库安装再次就省略了,网上资料很多。

一、效果图

这里写图片描述

二、DDL

顾名思义:DDL-Data Define Language 数据库定义语言。主要是用来“诞生”数据库和数据表的语句。定义好这样一个“容器”,为后期往里面存放数据做准备。就类似建一座房子,挖好一个地窖类似。语言主要有:create drop alter 等。

三、DML

顾名思义,DML-Data Maniufaction Language 数据库操作语言。操作,就是针对“房间”或者“地窖”这样的容器而言,给里面存“粮食”(数据),基本就是增删改。insert update delete 等。

四、DQL

顾名思义,DQL-Data Query Language 数据库查询语言,也就是select 。是日常运用最多的语句。这里面涉及的就是查询的一些关键字 select distinct from where group by having order by limit desc asc like 等等,单表查询、多表查询。多表查询是重点;怎么查,如何快速高效的查,方法很灵活。

练习过程如下:

#DDL
#1.登录
    mysql -uroot -p119913;

#2.关于数据库的基本操作

    show databases;

    #创建数据库
        create database db_xiaomei;
    show databases;
    #查看哪个数据库在使用
        select database();
    #如果结果为NULL,表明没有选中数据库。要找一本书,首先要进入阅读区-数据库,然后在找对应的书架-表

    #使用数据库db_xiaomei
        user db_xiaomei; #这里不用use database db_xiaomei;因为use只是针对数据库而言,加上就报错 成功提示 Database changed
    #删除数据库
        drop database db_xiaomei;#drop 不仅适用数据库,也适用表,所以要用databasetable区别开来。
    #好,把以上命令重复一遍;数据库一般不修改,与其修改,还不如删除掉方便。

#3.关于数据表的基本操作
    #查看表
        show tables; #Empty

    #创建一张表
        create table t_01(
            id int auto_increment primary key comment "人物Id",
            name varchar(10) not null comment "人物姓名",
            age int unsigned comment "年龄",
            talentPoem int comment "诗词天赋值"
        )engine=MyIsam  charset=gbk   comment="红楼梦人物简表";

    #显示创建表的语句及详细信息
        show create table t_01;
    #以上故意修改了表的引擎,默认engine=InnoDB  charset = utf8 注意字段注释与表注释的区别
    #查看表结构
        desc t_01;

    #为t_01增加一个属性 loveScore varchar(10) not null;
        alter table t_01 add loveScore varchar(10) not null ;

    #修改t_01的loveScore字段varchar(10) 为varchar(8),并增加注释
        alter table t_01 modify loveScore varchar(8)  not null comment "喜爱程度";

    #修改t_01的loveScore字段为loveLevel
        alter table t_01 change loveScore loveLevel varchar(11) not null comment "喜好水平";

    #删除loveLevel字段
        alter table t_01 drop loveLevel;

    #修改表名
    alter table t_01 rename t_001; #继续改回来

    #好,到此为止,DDL语句告一段落。

#4.关于数据表内容的CUD操作
    #为表t_01插入一条数据
        insert into t_01 values(1,"宝玉哥哥",18,90);
    #查看一下数据
        select * from t_01;
    #指定字段插入多条数据
        insert into t_01 (name,age,talentPoem) values 
        ("黛玉妹纸",17,98),
        ("宝钗妹妹",17,96),
        ("湘云小兄弟",18,90),
        ("香菱小丫头",16,65),
        ("探春",15,88),
        ("妙玉",16,93);

    #修改妙玉的年龄为15岁。
        update t_01 set age=15 where name="妙玉";
    #再次新增一条数据
        insert into t_01 (name,age,talentPoem) values ("凤辣子",33,78);
    #删除Id为8的数据
        delete from t_01 where id = 8;
    #删除整张表
        delete from t_01;#这里不忍心删除
    #到此为止,关于DML的基本语句就练习到这里,框架部分的CURD操作也无非就是这些语句的灵活运用;其他读者请自行拓展奥~

#5.重点练习DQL语句也就是select
    #通过一组题目来温习这些语句吧
    #准备工作创建一张表t_hero;
        create table t_hero (
            id int auto_increment comment "英雄Id",
            name varchar(10) not null comment "英雄姓名",
            attack int comment "武力值",
            country varchar(10) comment "国家",
            primary key(id)
        )comment="三国英雄表";

    #为t_hero插入数据
        insert into t_hero (id,name,attack,country) values
        (101,"刘备",78,"蜀"),
        (102,"曹操",83,"魏"),
        (103,"孙权",89,"吴"),
        (104,"关羽",96,"蜀"),
        (105,"张飞",98,"蜀"),
        (106,"吕布",99,NULL),
        (107,"诸葛亮",70,"蜀"),
        (108,"周瑜",90,"吴"    ),
        (109,"陆逊",89,"吴"),
        (110,"司马懿",67,"魏"),
        (111,"马超",90,NULL);

    #开始练习喽;为了锻炼对大写的敏感度,全部大写
    #1)查询所有武将的姓名及武力,并按武力降序排列。
        SELECT NAME,ATTACK FROM T_HERO ORDER BY ATTACK DESC;
    #2)查询魏国和蜀国所有的武将,并显示武将姓名和国家。
        SELECT NAME,COUNTRY FROM T_HERO WHERE COUNTRY IN ("魏","蜀");
    #3)查询武力值在 80~90 之间的所有武将的编号、姓名及武力。
        SELECT ID,NAME,ATTACK FROM T_HERO WHERE ATTACK BETWEEN 80 AND 90;
    #4)查询所有武将武力的最大、最小、平均值。
        SELECT MAX(ATTACK) 武力最大,MIN(ATTACK) 武力最小,AVG(ATTACK) 武力平均 FROM T_HERO;
    #5)查询所有姓张的武将编号及名称。
        SELECT ID,NAME FROM T_HERO WHERE NAME LIKE "张%";
    #6)查询各国家武将的数量,显示国家名和武将数量。
        SELECT COUNTRY,COUNT(ID) 武将数量 FROM T_HERO  GROUP BY COUNTRY;
    #7)查询武力排行前三名的武将姓名和武力。
        SELECT NAME,ATTACK FROM T_HERO ORDER BY ATTACK DESC LIMIT 3;
    #8)查询所有的在野(无国家)武将姓名和武力。
        SELECT NAME,ATTACK FROM T_HERO WHERE COUNTRY IS NULL;
    #9)查询武将数大于3人的国家的国家名和人数。
        SELECT COUNTRY,COUNT(ID)  NUM FROM T_HERO GROUP BY COUNTRY HAVING COUNT(ID)>3;
    #10)查询武力值和周瑜相同的所有武将的姓名和国家。
        SELECT NAME,COUNTRY FROM T_HERO WHERE ATTACK = (SELECT ATTACK FROM T_HERO WHERE NAME = "周瑜");

cmd创建命令练习过程(部分):


+----+------------+------+------------+
7 rows in set (0.00 sec)

mysql> update t_01 set age=15 where name="妙玉";
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> insert into t_01 (name,age,talentPoem) values ("凤辣子",33,78);
Query OK, 1 row affected (0.00 sec)

mysql> select * from t_01;
+----+------------+------+------------+
| id | name       | age  | talentPoem |
+----+------------+------+------------+
|  1 | 宝玉哥哥   |   18 |         90 |
|  2 | 黛玉妹纸   |   17 |         98 |
|  3 | 宝钗妹妹   |   17 |         96 |
|  4 | 湘云小兄弟 |   18 |         90 |
|  5 | 香菱小丫头 |   16 |         65 |
|  6 | 探春       |   15 |         88 |
|  7 | 妙玉       |   15 |         93 |
|  8 | 凤辣子     |   33 |         78 |
+----+------------+------+------------+
8 rows in set (0.00 sec)

mysql> delete from t_01 where id = 8;
Query OK, 1 row affected (0.00 sec)

mysql> create table t_hero (
    ->          id int auto_increment comment "英雄Id",
    ->          name varchar(10) not null comment "英雄姓名";
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3
mysql>          attack int comment "武力值",
    ->          country varchar(10) comment "国家";
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'attack int comment "武力值",
                country varchar(10) comment "国家"' at line 1
mysql>  )comment="三国英雄表";
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')comment="三国英雄表"' at line 1
mysql> create table t_hero (
    ->          id int auto_increment comment "英雄Id",
    ->          name varchar(10) not null comment "英雄姓名",
    ->          attack int comment "武力值",
    ->          country varchar(10) comment "国家"
    ->  )comment="三国英雄表";
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
mysql> create table t_hero (
    ->          id int auto_increment comment "英雄Id",
    ->          name varchar(10) not null comment "英雄姓名",
    ->          attack int comment "武力值",
    ->          country varchar(10) comment "国家",
    ->          primary key(id)
    ->  )comment="三国英雄表";
Query OK, 0 rows affected (0.01 sec)

mysql> show tables;
+----------------------+
| Tables_in_db_xiaomei |
+----------------------+
| t_01                 |
| t_hero               |
+----------------------+
2 rows in set (0.00 sec)

mysql> desc t_hero;
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| id      | int(11)     | NO   | PRI | NULL    | auto_increment |
| name    | varchar(10) | NO   |     | NULL    |                |
| attack  | int(11)     | YES  |     | NULL    |                |
| country | varchar(10) | YES  |     | NULL    |                |
+---------+-------------+------+-----+---------+----------------+
4 rows in set (0.02 sec)

mysql> insert into t_hero (id,name,attack,country) values
    ->  (101,"刘备",78,"蜀"),
    ->  (102,"曹操",83,"魏"),
    ->  (103,"孙权",89,"吴"),
    ->  (104,"关羽",96,"蜀"),
    ->  (105,"张飞",98,"蜀"),
    ->  (106,"吕布",99,NULL),
    ->  (107,"诸葛亮",70,"蜀"),
    ->  (108,"周瑜",90,"吴"     ),
    ->  (109,"陆逊",89,"吴");
Query OK, 9 rows affected (0.05 sec)
Records: 9  Duplicates: 0  Warnings: 0

mysql>  (110,"司马懿",67,"魏"),
    ->  (111,"马超",90,NULL);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '110,"司马懿",67,"魏"),
        (111,"马超",90,NULL)' at line 1
mysql> select * from t_hero;
+-----+--------+--------+---------+
| id  | name   | attack | country |
+-----+--------+--------+---------+
| 101 | 刘备   |     78 | 蜀      |
| 102 | 曹操   |     83 | 魏      |
| 103 | 孙权   |     89 | 吴      |
| 104 | 关羽   |     96 | 蜀      |
| 105 | 张飞   |     98 | 蜀      |
| 106 | 吕布   |     99 | NULL    |
| 107 | 诸葛亮 |     70 | 蜀      |
| 108 | 周瑜   |     90 | 吴      |
| 109 | 陆逊   |     89 | 吴      |
+-----+--------+--------+---------+
9 rows in set (0.00 sec)

mysql> nsert into t_hero (id,name,attack,country) values
    ->  (110,"司马懿",67,"魏"),
    ->  (111,"马超",90,NULL);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'nsert into t_hero (id,name,attack,country) values
        (110,"司马懿",67,"魏"),
        ' at line 1
mysql> delete from t_hero;
Query OK, 9 rows affected (0.05 sec)

mysql> select * from t_hero;
Empty set (0.00 sec)

mysql> insert into t_hero (id,name,attack,country) values
    ->  (101,"刘备",78,"蜀"),
    ->  (102,"曹操",83,"魏"),
    ->  (103,"孙权",89,"吴"),
    ->  (104,"关羽",96,"蜀"),
    ->  (105,"张飞",98,"蜀"),
    ->  (106,"吕布",99,NULL),
    ->  (107,"诸葛亮",70,"蜀"),
    ->  (108,"周瑜",90,"吴"     ),
    ->  (109,"陆逊",89,"吴"),
    ->  (110,"司马懿",67,"魏"),
    ->  (111,"马超",90,NULL);
Query OK, 11 rows affected (0.05 sec)
Records: 11  Duplicates: 0  Warnings: 0

mysql> select * from t_hero;
+-----+--------+--------+---------+
| id  | name   | attack | country |
+-----+--------+--------+---------+
| 101 | 刘备   |     78 | 蜀      |
| 102 | 曹操   |     83 | 魏      |
| 103 | 孙权   |     89 | 吴      |
| 104 | 关羽   |     96 | 蜀      |
| 105 | 张飞   |     98 | 蜀      |
| 106 | 吕布   |     99 | NULL    |
| 107 | 诸葛亮 |     70 | 蜀      |
| 108 | 周瑜   |     90 | 吴      |
| 109 | 陆逊   |     89 | 吴      |
| 110 | 司马懿 |     67 | 魏      |
| 111 | 马超   |     90 | NULL    |
+-----+--------+--------+---------+
11 rows in set (0.00 sec)

mysql> select name,attack from t_hero order by attack desc;
+--------+--------+
| name   | attack |
+--------+--------+
| 吕布   |     99 |
| 张飞   |     98 |
| 关羽   |     96 |
| 周瑜   |     90 |
| 马超   |     90 |
| 孙权   |     89 |
| 陆逊   |     89 |
| 曹操   |     83 |
| 刘备   |     78 |
| 诸葛亮 |     70 |
| 司马懿 |     67 |
+--------+--------+
11 rows in set (0.00 sec)

mysql> SELECT name,attack FROM tbgeneral ORDER BY attack DESC
    -> ;
ERROR 1146 (42S02): Table 'db_xiaomei.tbgeneral' doesn't exist
mysql> SELECT NAME,ATTACK FROM T_HERO ORDER BY ATTACK DESC;
+--------+--------+
| NAME   | ATTACK |
+--------+--------+
| 吕布   |     99 |
| 张飞   |     98 |
| 关羽   |     96 |
| 周瑜   |     90 |
| 马超   |     90 |
| 孙权   |     89 |
| 陆逊   |     89 |
| 曹操   |     83 |
| 刘备   |     78 |
| 诸葛亮 |     70 |
| 司马懿 |     67 |
+--------+--------+
11 rows in set (0.01 sec)

mysql> SELECT NAME,COUNTRY FROM T_HERO WHERE COUNTRY IN ("魏","蜀");
+--------+---------+
| NAME   | COUNTRY |
+--------+---------+
| 刘备   | 蜀      |
| 曹操   | 魏      |
| 关羽   | 蜀      |
| 张飞   | 蜀      |
| 诸葛亮 | 蜀      |
| 司马懿 | 魏      |
+--------+---------+
6 rows in set (0.00 sec)

mysql> SELECT ID,NAME,ATTACK FROM T_HERO WHERE ATTACK BETWEEN 80 AND 90;
+-----+------+--------+
| ID  | NAME | ATTACK |
+-----+------+--------+
| 102 | 曹操 |     83 |
| 103 | 孙权 |     89 |
| 108 | 周瑜 |     90 |
| 109 | 陆逊 |     89 |
| 111 | 马超 |     90 |
+-----+------+--------+
5 rows in set (0.00 sec)

mysql> SELECT MAX(ATTACK) 武力最大,MIN(ATTACK) 武力最小,AVG(ATTACK) 武力平均 FROM T_HERO;
+----------+----------+----------+
| 武力最大 | 武力最小 | 武力平均 |
+----------+----------+----------+
|       99 |       67 |  86.2727 |
+----------+----------+----------+
1 row in set (0.00 sec)

mysql> SELECT ID,NAME FROM T_HERO WHERE NAME LIKE "张%";
+-----+------+
| ID  | NAME |
+-----+------+
| 105 | 张飞 |
+-----+------+
1 row in set (0.00 sec)

mysql> SELECT COUNTRY,COUNT(COUNTRY) 武将数量 FROM T_HERO GRUOP BY COUNTRY;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'BY COUNTRY' at line 1
mysql> SELECT COUNTRY,COUNT(NAME) 武将数量 FROM T_HERO GRUOP BY COUNTRY;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'BY COUNTRY' at line 1
mysql> SELECT COUNTRY,COUNT(ID) 武将数量 FROM T_HERO GRUOP BY COUNTRY;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'BY COUNTRY' at line 1
mysql> SELECT COUNTRY,COUNT(COUNTRY) 武将数量 FROM T_HERO  GROUP BY COUNTRY;
+---------+----------+
| COUNTRY | 武将数量 |
+---------+----------+
| NULL    |        0 |
| 吴      |        3 |
| 蜀      |        4 |
| 魏      |        2 |
+---------+----------+
4 rows in set (0.00 sec)

mysql> SELECT COUNTRY,COUNT(ID) 武将数量 FROM T_HERO  GROUP BY COUNTRY;
+---------+----------+
| COUNTRY | 武将数量 |
+---------+----------+
| NULL    |        2 |
| 吴      |        3 |
| 蜀      |        4 |
| 魏      |        2 |
+---------+----------+
4 rows in set (0.00 sec)

mysql> SELECT NAME,ATTACK FROM T_HERO ORDER BY ATTACK DESC LIMIT 3;
+------+--------+
| NAME | ATTACK |
+------+--------+
| 吕布 |     99 |
| 张飞 |     98 |
| 关羽 |     96 |
+------+--------+
3 rows in set (0.00 sec)

mysql> SELECT NAME,ATTACK FROM T_HERO WHERE COUNTRY IS NULL;
+------+--------+
| NAME | ATTACK |
+------+--------+
| 吕布 |     99 |
| 马超 |     90 |
+------+--------+
2 rows in set (0.00 sec)

mysql> SELECT COUNTRY,COUNT(ID)  NUM FROM T_HERO GROUP BY COUNTRY HAVING COUNT>3;
ERROR 1054 (42S22): Unknown column 'COUNT' in 'having clause'
mysql>          SELECT COUNTRY,COUNT(ID)  NUM FROM T_HERO GROUP BY COUNTRY HAVING COUNT(ID)>3;
+---------+-----+
| COUNTRY | NUM |
+---------+-----+
| 蜀      |   4 |
+---------+-----+
1 row in set (0.00 sec)

mysql> SELECT NAME,COUNTRY FROM T_HERO WHERE ATTACK = (SELECT ATTACK FROM T_HERO WHERE NAME = "周瑜");
+------+---------+
| NAME | COUNTRY |
+------+---------+
| 周瑜 | 吴      |
| 马超 | NULL    |
+------+---------+
2 rows in set (0.00 sec)

mysql>

五、总结

现在是23:07分,时间总是过得很快。总结一下下:


1.这里未涉及多表查询,所以我们拭目以待吧;

2.语句都是最基础最基础的,当然,即便是最基础的语句,写sql的时候,不小心也容易犯错;

3.写出好的SQL,个人觉得对需求的理解是最关键的,说到底就是语文阅读理解能力;

4.有个疑问,怎样才算是SQL大咖?


六、下期预告

下期,我们将“连载”基础的项目,笔者边写边发表博客吧,欢迎围观斧正~~

好了,晚安,各位读者盆友们。下期再会!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值