您的位置:首页 > 数据库

SQL常用语句个人总结

2015-12-05 19:30 495 查看


1.查看数据库

语法:show databases 数据库名称
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydb               |
| mysql              |
| password           |
| performance_schema |
| test               |
+--------------------+
6 rows in set (0.00 sec)


 

上面mydb是我创建的数据库,后面跟大家说怎么创建。先学查看没问题的,因为你不创建,默认都有数据库在里头的。另外,mysql这个库最好别改哦,里面有管理员的账号和密码。


查看当前数据库编码表

语法:show create database 数据库名称

 
mysql> show create database mydb;
+----------+---------------------------------------------------------------+
| Database | Create Database                                               |
+----------+---------------------------------------------------------------+
| mydb     | CREATE DATABASE `mydb` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+---------------------------------------------------------------+
1 row in set (0.04 sec)


 

从上面的表可以看出这个数据库的格式是utf-8的,但在数据库里头,显示和设置时都不要横杠,直接写utf8。这个要注意一下哈!我们可以在安装的时候设置,也可以在配置文件里设置。


3.创建数据库

语法:create database 数据库名
mysql> create database sunofbeaches;
Query OK, 1 row affected (0.00 sec)


 

好的,我们用上面的语句:show databases;查看一下吧,一定要注意,这里这个databases有s哦,多个数据库嘛。
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydb               |
| mysql              |
| password           |
| performance_schema |
| sunofbeaches       |
| test               |
+--------------------+
7 rows in set (0.00 sec)


 

从上面可以看到,多了一个sunofbeaches数据库啦,是吧,所以呢,我们成功地创建了数据库了哈!好的,继续往下吧!


3.删除数据库

语法:drop database 数据库名
mysql> drop database password;
Query OK, 1 row affected (0.09 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydb               |
| mysql              |
| performance_schema |
| sunofbeaches       |
| test               |
+--------------------+
6 rows in set (0.00 sec)


 

上面,我把password这个数据库删除了,当然,删除数据库一定要小心。最好这样做,第一请示上面的人,对吧,如果你最大就小心点,看清楚,千万别删除错了,有时候项目多了,或者命名很像,很容易删除错的。第二要备份好数据,这些没得后悔的哦,好吧,注意一下吧!展示出删除后的数据库,的确没有password这个数据库了。说明删除成功的哦!


3.修改数据库编码

语法:alter database 数据库名 character set 编码表名
mysql> alter database sunofbeaches character set gbk;
Query OK, 1 row affected (0.00 sec)


通过这个语句,我把数据库的编码改成了GBK。

我们再通过上面的语句对这个数据库的编码进行查看一下嘛。
mysql> show create database sunofbeaches;
+--------------+----------------------------------------------------------------------+
| Database     | Create Database                                                      |
+--------------+----------------------------------------------------------------------+
| sunofbeaches | CREATE DATABASE `sunofbeaches` /*!40100 DEFAULT CHARACTER SET gbk */ |
+--------------+----------------------------------------------------------------------+
1 row in set (0.00 sec)


 


3.切换数据库

语法格式:use 数据库名
mysql> use sunofbeaches;
Database changed


 


3.查看当前所使用的数据库

语法:select database();
mysql> select database();
+--------------+
| database()   |
+--------------+
| sunofbeaches |
+--------------+
1 row in set (0.00 sec)


 

从这里开始,我们基本上把这个数据库的操作语句搞定了。第一个是展示出数据库,再者就是创建,删除,查看和修改编码表。

那么接下来,我们开始学习这个对数据表的操作了。也是增删改查嘛!

数据表在数据库里头,一个数据库可以有多个数据表。接下来就看看:
创建表
添加数据
查询信息
删除表


8.创建数据表

语法:create table 数据表名(
列名 列名类型(长度) [约束]
列名 列名类型(长度) [约束]
................................
);
举个例子:我们在sunofbeaches数据库下创建一个学生表,然后这个表里头包括:ID号,学生的姓名,年龄,性别。
 

步骤:进入数据库,或者说使用数据库:use sunofbeaches;

mysql> use sunofbeaches;
Database changed
mysql> create table student(
-> id int,
-> name varchar(50),
-> age int,
-> sex varchar(10)
-> );
Query OK, 0 rows affected (0.13 sec)


 

然后我们还可以进行查看一下嘛,接下来就是我们查看表结构的语句啦,在上面创建中,并没有加入约束,后面再说约束。

 

有了数据表,我们可以在这个查看当前数据库下有什么表吧!OK,太简单了,就是句话,哈哈!


8.查看数据表

从前面这个查看数据库的语句(show databases;)中也可以推测出这个查看数据表的语句。

语法:show tables;
mysql> show tables;
+------------------------+
| Tables_in_sunofbeaches |
+------------------------+
| student                |
+------------------------+
1 row in set (0.00 sec)


 

通过上面这个表,我们可以知道,在这个sunofbeaches这个数据库下,有一张表叫student


查看数据表结构

语法:desc 数据表名
mysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(50) | YES  |     | NULL    |       |
| age   | int(11)     | YES  |     | NULL    |       |
| sex   | varchar(10) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.04 sec)


 

通过这个语句,我们可以看到呀,这个表的列就建立好了,上面的表解释一下吧,第一列是列名,然后的话,第二列是类型以及长度,后面的是约束。

 

好吧,我还是画一个图吧,这样大家就一目鸟然啦,嘻嘻!





 


11.对数据表结构进行修改

有这样一种情况,我们需要修改列名(id|name|age|sex),又或者要修改他们的长度,或者这个表的编码形式。对了,由于这个控制台的编码表GBK的,而我的数据库的编码格式是UTF-8.

如果要显示中文,我们就需要修改一下这个编码格式啦,可以在配置文件里修改,也可以在这个控制台下修改。后面说吧!

 

先说对结构的修改。先看语法:

alter table 数据表名 增/删/改/改(add/drop/change/modify)列名 类型(长度) 约束

 

例子:

A.在我们的student表中添加一项address(地址)
mysql> alter table student add address varchar(200);
Query OK, 2 rows affected (0.23 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> desc student;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| id      | int(11)      | YES  |     | NULL    |       |
| name    | varchar(50)  | YES  |     | NULL    |       |
| age     | int(11)      | YES  |     | NULL    |       |
| sex     | varchar(10)  | YES  |     | NULL    |       |
| address | varchar(200) | YES  |     | NULL    |       |
+---------+--------------+------+-----+---------+-------+
5 rows in set (0.01 sec)


 

B.看到了吗?是不是多了一项呢?是吧,继续来删除项吧!删除sex项
mysql> alter table student drop sex;
Query OK, 2 rows affected (0.26 sec)
Records: 2  Duplicates: 0  Warnings: 0


 

C.change和这个modify,好马上演示一下:

把列名改了:change
mysql> alter table student change id number int;
Query OK, 2 rows affected (0.23 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> desc student;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| number  | int(11)      | YES  |     | NULL    |       |
| name    | varchar(50)  | YES  |     | NULL    |       |
| age     | int(11)      | YES  |     | NULL    |       |
| address | varchar(200) | YES  |     | NULL    |       |
+---------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)


 

改类型、长度、约束:modify
mysql> alter table student modify name varchar(100);
Query OK, 2 rows affected (0.23 sec)
Records: 2  Duplicates: 0  Warnings: 0


 

这里修改的是name的长度

 

其他的修改:

删除列

语法:alter table 表名 drop 列名;

例子:删除地址
mysql> alter table student drop address;
Query OK, 2 rows affected (0.23 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> desc student;
+--------+--------------+------+-----+---------+-------+
| Field  | Type         | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| number | int(11)      | YES  |     | NULL    |       |
| name   | varchar(100) | YES  |     | NULL    |       |
| age    | int(11)      | YES  |     | NULL    |       |
+--------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)


 

改表名:

语法:rename table 旧表名 to 新表名;

例子:把这个student表改成了person表
mysql> rename table student to person;
Query OK, 0 rows affected (0.05 sec)

mysql> show tables;
+------------------------+
| Tables_in_sunofbeaches |
+------------------------+
| person                 |
+------------------------+
1 row in set (0.00 sec)


 


给数据表添加数据

但是呢,这表是不是没有内容呀!对吧!接下来我们就添加内容吧!

语法:insert into 数据表名(列名,列名.....) values(值1,值2,值3....);

PS:这里的列明则是上面的我们创建的id、name、age、sex这些,如果在添加值的时候是全添加的话,可以省略(列名,列名.....),直接是insert into 数据表名values(值1,值2,值3....);
mysql> insert into student(id,name,age,sex) values(1,'zhangshan',19,'female');
Query OK, 1 row affected (0.09 sec)


 

由上格式添加,其实我还可以像PS里说的那样,省略列名添加。好的,我再添加一个吧!
mysql> insert into student values(2,'lisi',22,'male');
Query OK, 1 row affected (0.06 sec)


 


查看数据表内容

语法:select * from 数据表名;
mysql> select * from student;
+------+-----------+------+--------+
| id   | name      | age  | sex    |
+------+-----------+------+--------+
|    1 | zhangshan |   19 | female |
|    2 | lisi      |   22 | male   |
+------+-----------+------+--------+
2 rows in set (0.00 sec)


 

这样我们就可以看到这个表子了吧!到这里,我们把创建和添加数据就搞定了吧!

好,继续往下!


13.查询数据

第一个当然是我们用得最多的语句:select * from表名;

没有条件嘛,所以就全部都列出来啦!
我们可以加个条件比如说:

select * from 表名 where age > 30;

 

为了演示这个,我添加几条数据吧,如下:
mysql> select * from person;
+--------+-----------+------+
| number | name      | age  |
+--------+-----------+------+
|      1 | zhangshan |   40 |
|      2 | lisi      |   30 |
|      3 | wangwu    |   50 |
|      4 | zhaoliu   |   10 |
+--------+-----------+------+
4 rows in set (0.00 sec)


 

例子,我们找出这个大于20岁的人。
mysql> select * from person where age > 20;
+--------+-----------+------+
| number | name      | age  |
+--------+-----------+------+
|      1 | zhangshan |   40 |
|      2 | lisi      |   30 |
|      3 | wangwu    |   50 |
+--------+-----------+------+
3 rows in set (0.00 sec)


 

添加可以指定值是什么,还可以用一些逻辑判断的符号,比如说,大于:> 小于:<

不等于:<>

另外还有这个and or not这几个逻辑词,和与或非一样的效果。但在这个数据库在里用这三个。

比如说我要找出30-50岁之间的人。
mysql> select * from person where age > 30 and age < 50;
+--------+-----------+------+
| number | name      | age  |
+--------+-----------+------+
|      1 | zhangshan |   40 |
+--------+-----------+------+
1 row in set (0.07 sec)


 

指定值:比如说,我要找出这个40岁,30岁,10岁的所有人。

in(10,40,50)等同说:10 or 40 or 50
mysql> select * from person where age in(10,40,50);
+--------+-----------+------+
| number | name      | age  |
+--------+-----------+------+
|      1 | zhangshan |   40 |
|      3 | wangwu    |   50 |
|      4 | zhaoliu   |   10 |
+--------+-----------+------+
3 rows in set (0.00 sec)


 

等同于:
mysql> select * from person where age = 10 or age = 40 or age = 50;
+--------+-----------+------+
| number | name      | age  |
+--------+-----------+------+
|      1 | zhangshan |   40 |
|      3 | wangwu    |   50 |
|      4 | zhaoliu   |   10 |
+--------+-----------+------+
3 rows in set (0.04 sec)


 

模糊查找:

 

语法:select * from 表名 where like(这里模糊的地方可以用百分号表示,用下划线可以占位)

 

为了演示方便, 我把编码改成这个GBK的,然后添加中文,这样的话大家比较好理解。
mysql> select * from person;
+--------+-----------+------+
| number | name      | age  |
+--------+-----------+------+
|      1 | zhangshan |   10 |
|      1 | 张三      |   10 |
|      3 | 老张      |   38 |
|      4 | 李四四    |   54 |
|      5 | 张小三    |   23 |
+--------+-----------+------+
5 rows in set (0.00 sec)


 

好,那我们找出有张字的人。
mysql> select * from person where name like '%张%';
+--------+--------+------+
| number | name   | age  |
+--------+--------+------+
|      1 | 张三   |   10 |
|      3 | 老张   |   38 |
|      5 | 张小三 |   23 |
+--------+--------+------+
3 rows in set (0.00 sec)


 

类似的还有张%,如果要找出只有两个字,姓张的可以这样写:张_
mysql> select * from person where name like '张_';
+--------+------+------+
| number | name | age  |
+--------+------+------+
|      1 | 张三 |   10 |
+--------+------+------+
1 row in set (0.00 sec)


 

把这些都说完之后呢,再说一个别名吧,嘻嘻!

 

当我们在查询多表的时候,可能会这个表的列名会在另外一个表中出现,为了区分,所以可以用起别名的方法来解决这个问题。直接上一个例子吧!

 

比如说:我现在只要这个person里面的number和这个名字就可以,此时,在数据表中的是number和这个name嘛,我们只要显示这两列,然后的话,名字改成这个ID号和这个名字,OK,开始啦!
mysql> select number ID号,name 名字 from person;
+------+-----------+
| ID号 | 名字      |
+------+-----------+
|    1 | zhangshan |
|    1 | 张三      |
|    3 | 老张      |
|    4 | 李四四    |
|    5 | 张小三    |
+------+-----------+
5 rows in set (0.00 sec)


 

把别名也搞定了,让我想想,还有什么呢?嘻嘻!这个吧,排序吧,说说排序也挺好的,这里的话就根据这个年龄来排序吧好吗?

语法如下:

select 列名,列名,列名.....from 表名  order by 列名 asc(升序)|desc(降序)

 

我们来排一下吧!
mysql> select * from person order by age desc;
+--------+-----------+------+
| number | name      | age  |
+--------+-----------+------+
|      4 | 李四四    |   54 |
|      3 | 老张      |   38 |
|      5 | 张小三    |   23 |
|      1 | zhangshan |   10 |
|      1 | 张三      |   10 |
+--------+-----------+------+
5 rows in set (0.00 sec)


 

反排一下吧,嘻嘻!
mysql> select * from person order by age asc;
+--------+-----------+------+
| number | name      | age  |
+--------+-----------+------+
|      1 | zhangshan |   10 |
|      1 | 张三      |   10 |
|      5 | 张小三    |   23 |
|      3 | 老张      |   38 |
|      4 | 李四四    |   54 |
+--------+-----------+------+
5 rows in set (0.00 sec)


 


修改数据表的内容

语法:update 表名 set 列名=值...[条件];如果没有条件的话,则全部改了。

例子:把zhangshan的年龄修改成40岁
mysql> select * from person;
+--------+-----------+------+
| number | name      | age  |
+--------+-----------+------+
|      1 | zhangshan |   40 |
|      2 | lisi      |   22 |
+--------+-----------+------+
2 rows in set (0.02 sec)


 


15.删除记录(表里的数据)

语法:delete from 表名 [条件];没条件就全删啦!
mysql> delete from person where name = 'lisi';
Query OK, 1 row affected (0.09 sec)

mysql> select * from person;
+--------+-----------+------+
| number | name      | age  |
+--------+-----------+------+
|      1 | zhangshan |   40 |
+--------+-----------+------+
1 row in set (0.00 sec)


 


15.SQL中的函数

函数有什么呢,我们直接调用的时候,就可获取到我们需要的值 啦,函数就像一个加工厂一样。是吧!

 

OK,看看有那些常用的吧!

最值:max min

平均数:avg

求和:sum

求个数:count

分组:group by

 

下面就演示一下吧!

那么一个先找出这个最小年龄和最大年龄吧。
mysql> select number,name,max(age) from person;
+--------+-----------+----------+
| number | name      | max(age) |
+--------+-----------+----------+
|      1 | zhangshan |       54 |
+--------+-----------+----------+
1 row in set (0.00 sec)


 

 

找出这个最小年龄的,貌似不给力哦,有两个,只给了我一个,哈哈!

还是我有不会的方法呀?天呀!
mysql> select number,name,min(age) from person;
+--------+-----------+----------+
| number | name      | min(age) |
+--------+-----------+----------+
|      1 | zhangshan |       10 |
+--------+-----------+----------+
1 row in set (0.00 sec)

平均数也是一样的啦

mysql> select avg(age) from person;
+----------+
| avg(age) |
+----------+
|  27.0000 |
+----------+
1 row in set (0.00 sec)
!
那我就添加几个一样的数据吧,然后分组,再求个数吧!

mysql> select * from person;
+--------+-----------+------+
| number | name      | age  |
+--------+-----------+------+
|      1 | zhangshan |   10 |
|      1 | 张三      |   10 |
|      3 | 老张      |   38 |
|      4 | 李四四    |   54 |
|      5 | 张小三    |   23 |
|      5 | lisi      |   40 |
|      5 | lisi      |   40 |
|      5 | lisi      |   40 |
|      5 | lisi      |   40 |
|      5 | lisi      |   40 |
+--------+-----------+------+
10 rows in set (0.00 sec)

然后的话,我们用这个number来分组。

mysql> select * from person group by number;
+--------+-----------+------+
| number | name      | age  |
+--------+-----------+------+
|      1 | zhangshan |   10 |
|      3 | 老张      |   38 |
|      4 | 李四四    |   54 |
|      5 | 张小三    |   23 |
+--------+-----------+------+
4 rows in set (0.00 sec)

求个数:统计出这个number=5个用户个数来。
mysql> select count(number) ,name,age from person where number=5;
+---------------+--------+------+
| count(number) | name   | age  |
+---------------+--------+------+
|             6 | 张小三 |   23 |
+---------------+--------+------+
1 row in set (0.00 sec)


原文:http://www.sunofbeaches.com/archives/1232
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  SQL 数据库