mysql基本SQL语句

Posted 明王不动心

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql基本SQL语句相关的知识,希望对你有一定的参考价值。

SQL语句中的大小写问题

a.关键字、函数名、列名和索引名不区分大小写。

b.数据库名、表名、别名及视图名区分大小写。

一.基本的操作

1.库操作

mysql> show databases;  #查看所有库
mysql> use mysql;    #切换库
mysql> create database test_ku;   #创建一个库
mysql> drop database test_ku;   #删除一个库

 

2.表操作

mysql> show tables;  #查看当前库中的所有列表
mysql> create table class_7(id int(11),name char(10),addr char(10));   #创建一个表
mysql> desc class_7;    #查看表的结构
mysql> show create table student_info;  #查看表的属性

mysql> show create table student_info\G

mysql> alter table class_7 rename to student_info; #更改表的名字
mysql> drop table student_info;  #删除表

 

3.字段操作

mysql> alter table score add id int(2) first;  #在最前面添加字段

mysql> alter table score add record int(3);  #添加字段,默认最后添加

mysql> alter table score add sex char(3) after name;  #在制定的字段后面添加字段

mysql> alter table score change record first_record int(2) default 0;  #修改字段名和属性

mysql> alter table score modify sex enum(‘男‘,‘女‘);  #修改字段属性的另一种方法,与change不同的是不能修改字段名

技术分享图片
+--------------+-------------------+------+-----+---------+-------+
| Field        | Type              | Null | Key | Default | Extra |
+--------------+-------------------+------+-----+---------+-------+
| id           | int(2)            | YES  |     | NULL    |       |
| name         | char(4)           | YES  |     | NULL    |       |
| sex          | enum(,)   | YES  |     | NULL    |       |
| first_record | int(2)            | YES  |     | 0       |       |
+--------------+-------------------+------+-----+---------+-------+
属性变化示例

mysql> alter table score drop first_record;   #删除字段

 

4.记录操作(增删改)

(1)增(insert)

mysql> insert into score value(1,‘科比‘,‘男‘);  #按照默认的顺序添加

mysql> insert into score(id,name) value(‘2‘,‘毛线‘);   #也可以指定要添加的字段

mysql> insert into score value(4,‘蒋大爷‘,‘男‘),(5,‘秦子琪‘,‘女‘);  #也可以一次添加多条

 

(2)改(update)

mysql> update score set sex = ‘男‘ where id = 2;    #按照条件修改字段

 

(3)删(delete)

mysql> delete from score where id = ‘0‘;  #指定条件删除

mysql>  delete from t1 where name is null;   #删除字段为空的那一行

mysql>  delete from t1;  #没有指定条件就会删除整张表

 

二、列表的查询方法

技术分享图片
+----+--------+---------+--------------+-------+
| id | name   | dorm    | addr         | score |
+----+--------+---------+--------------+-------+
|  1 | 科比   | 6号楼   | 湖北罗田     |    67 |
|  2 | 毛线   | 6号楼   | 湖北孝感     |    78 |
|  3 | 黄鱼   | 5号楼   | 湖北罗田     |    75 |
|  4 | 子豪   | 6号楼   | 江苏扬州     |    45 |
|  5 | 星爷   | 5号楼   | 湖北孝感     |     1 |
|  6 | 代鹏   | 5号楼   | 江苏盐城     |    85 |
|  7 | 子栋   | 6号楼   | 湖北洪湖     |    95 |
|  8 | 周攀   | 6号楼   | 湖北武穴     |    56 |
|  9 | 大爷   | 5号楼   | 湖北通城     |    82 |
| 10 | 小鸟   | 6号楼   | 湖北襄阳     |    38 |
+----+--------+---------+--------------+-------+
被查询的表

(1)where

条件判断

mysql> select * from test_info where score < 60;  #查询分数低于60分

技术分享图片
+----+--------+---------+--------------+-------+
| id | name   | dorm    | addr         | score |
+----+--------+---------+--------------+-------+
|  4 | 子豪   | 6号楼   | 江苏扬州     |    45 |
|  5 | 星爷   | 5号楼   | 湖北孝感     |     1 |
|  8 | 周攀   | 6号楼   | 湖北武穴     |    56 |
| 10 | 小鸟   | 6号楼   | 湖北襄阳     |    38 |
+----+--------+---------+--------------+-------+
分数低于60分

mysql> select * from test_info where score  > 70 and addr = "湖北罗田";  #分数大于70,而且还是罗田的

技术分享图片
mysql> select * from test_info where score  > 70 and addr = "湖北罗田";
+----+--------+---------+--------------+-------+
| id | name   | dorm    | addr         | score |
+----+--------+---------+--------------+-------+
|  3 | 黄鱼   | 5号楼   | 湖北罗田     |    75 |
+----+--------+---------+--------------+-------+
1 row in set (0.00 sec)
where...and...示例

mysql> select * from test_info where dorm = "5号楼" or score > 90;  #分数大于90或者在5号楼住

技术分享图片
mysql> select * from test_info where dorm = "5号楼" or score > 90;
+----+--------+---------+--------------+-------+
| id | name   | dorm    | addr         | score |
+----+--------+---------+--------------+-------+
|  3 | 黄鱼   | 5号楼   | 湖北罗田     |    75 |
|  5 | 星爷   | 5号楼   | 湖北孝感     |     1 |
|  6 | 代鹏   | 5号楼   | 江苏盐城     |    85 |
|  7 | 子栋   | 6号楼   | 湖北洪湖     |    95 |
|  9 | 大爷   | 5号楼   | 湖北通城     |    82 |
+----+--------+---------+--------------+-------+
5 rows in set (0.00 sec)
where...or...示例

 mysql> select * from test_info where score between 60 and 80;   #分数在60到80之间

技术分享图片
mysql> select * from test_info where score between 60 and 80;
+----+--------+---------+--------------+-------+
| id | name   | dorm    | addr         | score |
+----+--------+---------+--------------+-------+
|  1 | 科比   | 6号楼   | 湖北罗田     |    67 |
|  2 | 毛线   | 6号楼   | 湖北孝感     |    78 |
|  3 | 黄鱼   | 5号楼   | 湖北罗田     |    75 |
+----+--------+---------+--------------+-------+
3 rows in set (0.00 sec)
#注意between包含两边
where...between...and

mysql> select * from test_info where addr in ("湖北罗田","湖北孝感");   #某个字段在某一个选择之内

技术分享图片
mysql> select * from test_info where addr in ("湖北罗田","湖北孝感");
+----+--------+---------+--------------+-------+
| id | name   | dorm    | addr         | score |
+----+--------+---------+--------------+-------+
|  1 | 科比   | 6号楼   | 湖北罗田     |    67 |
|  2 | 毛线   | 6号楼   | 湖北孝感     |    78 |
|  3 | 黄鱼   | 5号楼   | 湖北罗田     |    75 |
|  5 | 星爷   | 5号楼   | 湖北孝感     |     1 |
+----+--------+---------+--------------+-------+
4 rows in set (0.00 sec)

mysql> select * from test_info where addr not in ("湖北罗田","湖北孝感");
+----+--------+---------+--------------+-------+
| id | name   | dorm    | addr         | score |
+----+--------+---------+--------------+-------+
|  4 | 子豪   | 6号楼   | 江苏扬州     |    45 |
|  6 | 代鹏   | 5号楼   | 江苏盐城     |    85 |
|  7 | 子栋   | 6号楼   | 湖北洪湖     |    95 |
|  8 | 周攀   | 6号楼   | 湖北武穴     |    56 |
|  9 | 大爷   | 5号楼   | 湖北通城     |    82 |
| 10 | 小鸟   | 6号楼   | 湖北襄阳     |    38 |
+----+--------+---------+--------------+-------+
6 rows in set (0.00 sec)
where....[not]in.....

 

模糊查询(like)

mysql> select name from test_info where addr like ‘__罗田‘;  #查询罗田

技术分享图片
mysql> select name from test_info where addr like __罗田;
+--------+
| name   |
+--------+
| 科比   |
| 黄鱼   |
+--------+
2 rows in set (0.00 sec)
like模糊查询

 

(2)排序(order by)

mysql> select * from test_info order by score;  #按照成绩升序

技术分享图片
mysql> select * from test_info order by score;
+----+--------+---------+--------------+-------+
| id | name   | dorm    | addr         | score |
+----+--------+---------+--------------+-------+
|  5 | 星爷   | 5号楼   | 湖北孝感     |     1 |
| 10 | 小鸟   | 6号楼   | 湖北襄阳     |    38 |
|  4 | 子豪   | 6号楼   | 江苏扬州     |    45 |
|  8 | 周攀   | 6号楼   | 湖北武穴     |    56 |
|  1 | 科比   | 6号楼   | 湖北罗田     |    67 |
|  3 | 黄鱼   | 5号楼   | 湖北罗田     |    75 |
|  2 | 毛线   | 6号楼   | 湖北孝感     |    78 |
|  9 | 大爷   | 5号楼   | 湖北通城     |    82 |
|  6 | 代鹏   | 5号楼   | 江苏盐城     |    85 |
|  7 | 子栋   | 6号楼   | 湖北洪湖     |    95 |
+----+--------+---------+--------------+-------+
10 rows in set (0.00 sec)
升序

mysql> select * from test_info order by score desc;  #降序

技术分享图片
mysql> select * from test_info order by score desc;
+----+--------+---------+--------------+-------+
| id | name   | dorm    | addr         | score |
+----+--------+---------+--------------+-------+
|  7 | 子栋   | 6号楼   | 湖北洪湖     |    95 |
|  6 | 代鹏   | 5号楼   | 江苏盐城     |    85 |
|  9 | 大爷   | 5号楼   | 湖北通城     |    82 |
|  2 | 毛线   | 6号楼   | 湖北孝感     |    78 |
|  3 | 黄鱼   | 5号楼   | 湖北罗田     |    75 |
|  1 | 科比   | 6号楼   | 湖北罗田     |    67 |
|  8 | 周攀   | 6号楼   | 湖北武穴     |    56 |
|  4 | 子豪   | 6号楼   | 江苏扬州     |    45 |
| 10 | 小鸟   | 6号楼   | 湖北襄阳     |    38 |
|  5 | 星爷   | 5号楼   | 湖北孝感     |     1 |
+----+--------+---------+--------------+-------+
降序

 mysql> select * from test_info order by score desc limit 3; #取成绩的前三名

技术分享图片
mysql> select * from test_info order by score desc limit 3;
+----+--------+---------+--------------+-------+
| id | name   | dorm    | addr         | score |
+----+--------+---------+--------------+-------+
|  7 | 子栋   | 6号楼   | 湖北洪湖     |    95 |
|  6 | 代鹏   | 5号楼   | 江苏盐城     |    85 |
|  9 | 大爷   | 5号楼   | 湖北通城     |    82 |
+----+--------+---------+--------------+-------+
取前几个

 

(3)分组(group by)

mysql> select * from test_info group by dorm;  #按照宿舍分组

技术分享图片
mysql> select * from test_info group by dorm;
+----+--------+---------+--------------+-------+
| id | name   | dorm    | addr         | score |
+----+--------+---------+--------------+-------+
|  3 | 黄鱼   | 5号楼   | 湖北罗田     |    75 |
|  1 | 科比   | 6号楼   | 湖北罗田     |    67 |
+----+--------+---------+--------------+-------+
2 rows in set (0.00 sec)
分组

mysql> select *,group_concat(name) from test_info group by dorm;  #查看组成员

技术分享图片
mysql> select *,group_concat(name) from test_info group by dorm;
+----+--------+---------+--------------+-------+-------------------------------------------+
| id | name   | dorm    | addr         | score | group_concat(name)                        |
+----+--------+---------+--------------+-------+-------------------------------------------+
|  6 | 代鹏   | 5号楼   | 江苏盐城     |    85 | 代鹏,大爷,黄鱼,星爷                       |
|  8 | 周攀   | 6号楼   | 湖北武穴     |    56 | 周攀,子栋,科比,子豪,毛线,小鸟             |
+----+--------+---------+--------------+-------+-------------------------------------------+
2 rows in set (0.00 sec)
group_concat()

 

 

(4)函数

max():最大值

mysql> select max(score) from test_info;  #查询最高分

技术分享图片
mysql> select max(score) from test_info;
+------------+
| max(score) |
+------------+
|         95 |
+------------+
1 row in set (0.00 sec)
最高分

mysql> ) select * from test_info where score = (select max(score) from test_info);  #最高分的学员信息

技术分享图片
mysql> select * from test_info where score = (select max(score) from test_info);
+----+--------+---------+--------------+-------+
| id | name   | dorm    | addr         | score |
+----+--------+---------+--------------+-------+
|  7 | 子栋   | 6号楼   | 湖北洪湖     |    95 |
+----+--------+---------+--------------+-------+
1 row in set (0.00 sec)
最高分的学员信息

 

min():最小值

mysql> select min(score) from test_info;  #查询最低分

技术分享图片
mysql> select min(score) from test_info;
+------------+
| min(score) |
+------------+
|          1 |
+------------+
1 row in set (0.00 sec)
查询最低分

 

sum():求和

mysql> select sum(score) from test_info;  #成绩总和

技术分享图片
mysql> select sum(score) from test_info;
+------------+
| sum(score) |
+------------+
|        622 |
+------------+
1 row in set (0.00 sec)
求和

 

avg():平均值

mysql> select sum(score) from test_info;  #求平均值

技术分享图片
mysql> select sum(score) from test_info;
+------------+
| sum(score) |
+------------+
|        622 |
+------------+
1 row in set (0.00 sec)
求平均值

 

count():计数

mysql> select count(dorm) from test_info;  #统计行数

技术分享图片
mysql> select count(dorm) from test_info;
+-------------+
| count(dorm) |
+-------------+
|          10 |
+-------------+
1 row in set (0.00 sec)
统计

 





以上是关于mysql基本SQL语句的主要内容,如果未能解决你的问题,请参考以下文章

SQL Select 语句的用法

MySQL 最基本的SQL语法/语句

MySQL语句SQL应用

MySQL语句 - sql语句

MySQL语句 - sql语句

mysql基本SQL语句