SQL基础(一):sql基本规范、基本分类、sql语句中常规关键字、正则

目录

0 : sql语句常用关键字说明

0.1 检索不同的行,即:要求查询的数据不同,关键字:distinct

​编辑

0.2 限制结果条数,关键字:limit

0.3 结果排序,关键字 order by

0.4 多条件过滤的连接,关键字:and / or

0.5 模糊匹配,关键字:like,结合通配符:%,_

0.6 正则表达式实现模糊,关键字:REGEXP,结合正则

0.7 sql中实现计算,依据截图的例子,可以实现:+ - * /

0.8 WITH ROLLUP,在group by分组+聚合计算时,使用该关键字,汇总所有分组项的值;

一:sql规范

二:DDL:就是对数据库内部的对象进行创建、删除、修改的操作语言

三、DML

四、DCL 


0 : sql语句常用关键字说明

0.1 检索不同的行,即:要求查询的数据不同,关键字:distinct

SELECT DISTINCT vend_id,prod_price FROM products;

值得注意的是distinct 必须直接放在列名的前面,不能用于*,在聚合函数中,distinct只可用于count,格式:count(distinct 列),distinct关键字应用于所有列而不仅是前置它的列。如果给出SELECT DISTINCT vend_id, prod_price,除非指定的两个列都不同,否则所有行都将被检索出来;

 

 

0.2 限制结果条数,关键字:limit

#从第一行开始,查5行
SELECT DISTINCT vend_id,prod_price FROM products
LIMIT 5;

#从第3行开始,查5行
SELECT DISTINCT vend_id,prod_price FROM products
LIMIT 3,5;

值得注意的是:1.带一个值的LIMIT总是从第一行开始,给出的数为返回的行数;2. 带两个值的LIMIT可以指定从行号为第一个值的位置开始,获取条数为第二个数值;

0.3 结果排序,关键字 order by

SELECT prod_id,prod_price,prod_name 
FROM products
ORDER BY prod_price DESC,prod_name;
#prod_price列指定DESC,对prod_name列不指定。因此,prod_price列以降序排序,而prod_name列(在每个价格内)仍然按标准的升序排序

值得注意的是:根据上面sql, 多个行具有相同的prod_price 值时才对产品按prod_name进行排序。如果prod_price列中所有的值都是唯一的,则不会按prod_name排序;

默认:asc (升序), 可以指定 desc(降序)排序;

limit 和 order by 结合,可以查询某列最大或最小值(如:price);和max,min查询结果一致;

0.4 多条件过滤的连接,关键字:and / or

 值得注意的是:在处理OR操作符前,优先处理AND操作符

0.5 模糊匹配,关键字:like,结合通配符:%,_

0.6 正则表达式实现模糊,关键字:REGEXP,结合正则

#匹配字段prod_name包含1000
SELECT prod_name FROM products WHERE prod_name REGEXP '1000'
ORDER BY prod_name;

#匹配字段prod_name包含000,注意:.是正则表达式语言中一个特殊的字符。它表示匹配任意一个字符
SELECT prod_name FROM products WHERE prod_name REGEXP '.000'
ORDER BY prod_name;

#为搜索两个串之一,使用|
SELECT prod_name FROM products WHERE prod_name REGEXP '1000|2000'
ORDER BY prod_name;

#匹配几个字符之一,[123]定义一组字符,它的意思是匹配1或2或3,事实上,正则表达式[123]Ton为[1|2|3]Ton的缩写
SELECT prod_name FROM products WHERE prod_name REGEXP '[123] ton'
ORDER BY prod_name;

#匹配范围:集合可用来定义要匹配的一个或多个字符,可使用-来定义一个范围,如:[a-z]匹配任意字母字符
SELECT prod_name FROM products WHERE prod_name REGEXP '[1-5] ton [a-z]'
ORDER BY prod_name;

[:alnum:]   任意字母和数字(同[a-zA-Z0-9])
[:alpha:]   任意字符(同[a-zA-Z])
[:blank:]   空格和制表(同[\\t])
[:cntrl:]   ASCII控制字符(ASCII 0到31和127)
[:digit:]   任意数字(同[0-9])
[:graph:]   与[:print:]相同,但不包括空格
[:lower:]   任意小写字母(同[a-z])
[:print:]   任意可打印字符
[:punct:]   既不在[:alnum:]又不在[:cntrl:]中的任意字符
[:space:]   包括空格在内的任意空白字符(同[\\f\\n\\r\\t\\v])
[:upper:]   任意大写字母(同[A-Z])
[:xdigit:]  任意十六进制数字(同[a-fA-F0-9])

^           文本的开始
$           文本的结尾
[[:<:]]     词的开始
[[:>:]]     词的结尾

#另一个例子。这次我们打算匹配连在一起的4位数字

SELECT prod_name FROM products
WHERE prod_name REGEXP '[[:lower:]]{4}'
ORDER BY prod_name;
#例如,如果你想找出以一个数(包括以小数点开始的数)开始的所
#有产品,怎么办?简单搜索[0-9\\.](或[[:digit:]\\.])不行,因为
#它将在文本内任意位置查找匹配。解决办法是使用^定位符

SELECT prod_name FROM products WHERE prod_name REGEXP '^[0-9\\.]'
ORDER BY prod_name;

0.7 sql中实现计算,依据截图的例子,可以实现:+ - * /

0.8 WITH ROLLUP,在group by分组+聚合计算时,使用该关键字,汇总所有分组项的值;

一:sql规范

1.SQL语句不区分大小写;建议命令大写,表名库名小写;但字符串常量区分大小写,

课外知识:select now():查询出当前时间:格式:2019-04-27 10:18:10

2.SQL语句可单行或多行书写,已“;”结尾。关键字不可跨多行或简写;

3.用空格或者缩进来提高语句的可读性,子句通常位于独立行,便于编辑,提高可读性;

例如:

4.注释:单行注释:--

              多行注释:/*……*/

5.DDL,DML,DCL;(定义语言,操作语言、控制语言)这三部分共同构成了sql语言;

二:DDL:就是对数据库内部的对象进行创建、删除、修改的操作语言

1.创建数据库:

CREATE DATABASE dbname;

2. 查看已有数据库:show databases,

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| cluster |
| mysql |
| test |
| test1 |
+--------------------+
5 rows in set (0.00 sec)

还有另外 4 个数据库,它们都是安装
MySQL 时系统自动创建的,其各自功能如下。
 information_schema:主要存储了系统中的一些数据库对象信息。比如用户表信息、列信
息、权限信息、字符集信息、分区信息等。
 cluster:存储了系统的集群信息。
 mysql:存储了系统的用户权限信息。
 test:系统自动创建的测试数据库,任何用户都可以使用

3.在查看了系统中已有的数据库后,可以用如下命令选择要操作的数据库:

USE dbname;

4.删除数据库:

drop database dbname;

5.创建表

CREATE TABLE tablename (column_name_1  column_type_1  constraints,
column_name_2  column_type_2  constraints , ……column_name_n  column_type_n
constraints);

因为 MySQL 的表名是以目录的形式存在于磁盘上,所以表名的字符可以用任何目录名允许的字符。

column_name 是列的名字,column_type 是列的数据类型,contraints 是这个列的约束条件‘;

例如,创建一个名称为 emp 的表。表中包括 3 个字段,ename(姓名),hiredate(雇用日期)、
sal(薪水),字段类型分别为 varchar(10)、date、int(2);

mysql> create table emp(ename varchar(10),hiredate date,sal decimal(10,2),deptno int(2));

6.删除表:

DROP TABLE tablename;

7.修改表:

(1)修改字段:ALTER TABLE tablename MODIFY [COLUMN] column_definition [FIRST | AFTER col_name];

如:修改表 emp 的 ename 字段定义,将 varchar(10)改为 varchar(20):
mysql> alter table emp modify ename varchar(20);

(2)新增字段:ALTER TABLE tablename ADD [COLUMN] column_definition [FIRST | AFTER col_name]

例如,表 emp 上新增加字段 age,类型为 int(3):
mysql> alter table emp add column age int(3);

(3)删除表字段:ALTER TABLE tablename DROP [COLUMN] col_name

例如,将字段 age 删除掉:
mysql> alter table emp drop column age;

(4)字段改名,语法如下:

ALTER TABLE tablename CHANGE [COLUMN] old_col_name column_definition [FIRST|AFTER col_name]

例如,将 age 改名为 age1,同时修改字段类型为 int(4):
mysql> alter table emp change age age1 int(4) ;

(5)修改表名,语法如下:

ALTER TABLE tablename RENAME [TO] new_tablename

例如,将表 emp 改名为 emp1,命令如下:
mysql> alter table emp rename emp1;

三、DML

主要包括表记录的插入(insert)、更新(update)、删除(delete)和查询(select),是开发人员日常使用最频繁的操作;

查询:子查询:

select * from emp where deptno in(select deptno from dept);

如果子查询记录数唯一,还可以用=代替 in

mysql> select * from emp where deptno = (select deptno from dept);

某些情况下,子查询可以转化为表连接,例如:

mysql> select emp.* from emp ,dept where emp.deptno=dept.deptno;

四、DCL 

DCL 语句主要是 DBA 用来管理系统中的对象权限时所使用,一般的开发人员很少使用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冷凝娇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值