SQL基础语法学习及速查

SQL语法学习

DML(data manipulation language):
它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言
DDL(data definition language):
DDL比DML要多,主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用
DCL(Data Control Language):
是数据库控制功能。是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行DCL

1.数据库操作

查看所有数据库show databases;

切换(选择要操作的)数据库:
use 数据库名;
创建数据库:
CREATE DATABASE [IF NOT EXISTS] mydb1 [CHARSET=utf8];
删除数据库:
DROP DATABASE [IF EXISTS] mydb1;
修改数据库编码:
ALTER DATABASE mydb1 CHARACTER SET utf8;

2.表操作

创建表
CREATE TABLE [IF NOT EXISTS] 表名(
列名 列类型,
列名 列类型,
。。。
列名 列类型
);
查看当前数据库中所有表名称:
SHOW TABLES;
查看指定表的创建语句:
SHOW CREATE TABLE 表名;
查看表结构:
DESC 表名;
删除表:
DROP TABLE 表名;
修改表:
修改之添加列:
ALTER TABLE 表名 
ADD (
列名 列类型,
列名 列类型,
...
);
修改之修改列类型:

(如果被修改的列已存在数据,那么新的类型可能会影响到已存在数据)

ALTER TABLE 表名 
MODIFY 列名 列类型;
修改之修改列名:
ALTER TABLE 表名 
CHANGE 原列名 新列名 列类型;
修改之删除列:
ALTER TABLE 表名 
DROP 列名;
修改表名称:
ALTER TABLE 原表名 
RENAME TO 新表名;

3.数据操作

插入数据

第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:

INSERT INTO *table_name*
VALUES (*value1*,*value2*,*value3*,...);

第二种形式需要指定列名及被插入的值:

INSERT INTO *table_name* (*column1*,*column2*,*column3*,...)
VALUES (*value1*,*value2*,*value3*,...);
修改数据

UPDATE 语句用于更新表中已存在的记录。

UPDATE *table_name*
SET *column1*=*value1*,*column2*=*value2*,...
WHERE *some_column*=*some_value*;
删除数据

DELETE 语句用于删除表中的行。

DELETE FROM *table_name*
WHERE *some_column*=*some_value*;

4.DCL数据库控制

创建用户
CREATE USER 用户名@IP地址 IDENTIFIED BY '密码';//用户只能在指定IP地址上登陆
CREATE USER 用户名@'%' IDENTIFIED BY '密码';//用户可以在任意IP地址登陆
给用户授权
GRANT 权限1,...,权限n ON 数据库.* TO 用户名@IP地址
权限、用户、数据库
给用户分配在指定的数据库上的指定的权限

例如:

给user1用户分配在 数据库1 上的create、alter、drop、insert、update、delete、select权限

GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON 数据库1.* TO user1@localhost;

给用户分配指定数据库上的所有权限:

GRANT ALL ON 数据库.* TO 用户名@IP地址;
撤销授权

撤销指定用户在指定数据库上的指定权限:

REVOKE 权限1,...,权限n ON 数据库.* FROM 用户名@IP地址;

撤销user1用户在mydb1数据库上的create、alter、drop权限:

REVOKE CREATE,ALTER,DROP ON mydb1.* FROM user1@localhost;
查看权限

查看指定用户的权限:

SHOW GRANTS FOR 用户名@IP地址;
删除用户
DROP USER 用户名@IP地址;

5.基本查询之列控制

字段(列)控制
查询所有列
SELECT * FROM 表名;
SELECT * FROM emp;

其中 * 表示查询所有列

查询指定列
SELECT 列1,列2,...,列n FROM 表名;
SELECT empno,ename,sal,comm FROM 表名;
完全重复的记录只一次

当查询结果中的多行记录一模一样时,只显示一行,一般查询所有列时很少会有这种情况,但只查询一列(或几列)时,这总可能就打了!

SELECT DISTINCT *|列名 FROM 表名;
列运算
数量类型的列可以做加减乘除运算
SELECT 列名(+=*/)数字|列名 FROM 表名;
SELECT *,列名(+=*/)数字|列名 FROM 表名;
字符串类型可以做连续运算
SELECT CONCAT('$',sal) FROM emp;
转换NULL值

有时需要把NULL值转换成其他值,例如com+1000时,如果com列存在NULL值,那么NULL+1000还是NULL,而我们这时希望把NULL当作0来运算。

SELECT IFNULL(comm,0)+1000 FROM emp;
-->IFNULL(comm,0):如果comm中存在NULL值,那么当成0来运算。
给列起别名

你也许已经注意到了,当使用列运算后,查询出的结果集中的列名称很不好看,这时我们需要给列名起个别名,这样在结果集中列名就显示别名了

SELECT IFNULL(comm,0)+1000 AS 别名 FROM 表名;
其中AS可以省略
条件控制
条件查询(where)

与前面介绍的UPDATE和DELETE语句一样,SELECT 语句也可以使用WHERE子句来控制记录。

SELECT 列名 FROM 表名 WHERE 条件;
模糊查询(like)

当你想查询姓张,并且姓名一共两个字的员工时,这时就可以使用模糊查询。

SELECT * FROM 表名 WHERE 列名 LIKE '张 ';

模糊查询需要使用运算符:LIKE 其中,匹配一个任意字符,注意,只匹配一个字符而不是多个。

6.排序(ORDER BY)

升序
SELECT * FROM WHERE emp ORDER BY sal ASC;

按sal列排序,ASC表示升序,可省略。

降序
SELECT * FROM WHERE emp ORDER BY comm DESC;

按comm列排序,DESC表示降序,不可省略。

使用多列作为排序条件
SELECT * FROM WHERE emo ORDER BY sal ASC, comm DESC;

7.聚合函数(COUNT MAX MIN SUM AVG)

mysql> select * from car_detial;
+------+----------+----------+------------+--------+
| type | car_name | BIRTHDAY | owner_name | price  |
+------+----------+----------+------------+--------+
| suv  | 途观     |     2021 | yang       | 150000 |
| suv  | 哈佛H9   |     2020 | wang       | 200000 |
| 轿车 | 桑塔纳   |     2019 | bu         |   NULL |
| suv  | 途观     |     2020 | liu        | 180000 |
+------+----------+----------+------------+--------+
4 rows in set (0.00 sec)

mysql> select min(price) from car_detial;
+------------+
| min(price) |
+------------+
|     150000 |
+------------+
1 row in set (0.00 sec)

mysql> select max(price) from car_detial;
+------------+
| max(price) |
+------------+
|     200000 |
+------------+
1 row in set (0.00 sec)

mysql> select sum(price) from car_detial;
+------------+
| sum(price) |
+------------+
|     530000 |
+------------+
1 row in set (0.00 sec)

mysql> select avg(price) from car_detial;
+-------------+
| avg(price)  |
+-------------+
| 176666.6667 |
+-------------+
1 row in set (0.00 sec)

mysql> select count(*) from car_detial;
+----------+
| count(*) |
+----------+
|        4 |
+----------+

8.分组查询

mysql> select type,count(*) from car_detial group by type;
+------+----------+
| type | count(*) |
+------+----------+
| suv  |        3 |
| 轿车 |        1 |
+------+----------+

优先级

select>from>where>group by>having>order by

9.limit方言

LIMIT用来限定查询结果的起始行,以及总行数。

例如:查询起始行为第5行,一共查询3行记录

SELECT * FROM emp LIMIT 4,3;

其中,4表示从第5行开始,3表示一共查询3行,即第5、6、7行记录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值