数据库学习笔记-1

数据库学习笔记-1

一、SQL

SQL: 结构化查询语言,是一门标准通用的语言。标准的sql适合于所有的数据库产品。SQL语句在执行的时候,实际上内部也会先进行编译,然后再执行sql。(DBMS负责执行sql语句,通过执行sql语句来操作DB当中的数据。)


二、表

一个表包括行和列,行被称为数据/记录(data),列:被称为字段(column)

每一个字段应该包括字段名、数据类型、相关的约束。


三、SQL语句

SQL语句分类:

DQL(数据查询语言): 查询语句,凡是select语句都是DQL
DML(数据操作语言):insert delete update,对表当中的数据进行增删改
DDL(数据定义语言):create drop alter,对表结构的增删改
TCL(事务控制语言):commit提交事务,rollback回滚事务。(TCL中的T是Transaction 事务)
DCL(数据控制语言): grant授权、revoke撤销权限等


1.DQL

(1)简单查询
select 字段名1,字段名2,字段名3,.... from 表名;

一条sql语句以分号结尾
sql语句不区分大小写

字段可以参与数学运算,如

select ename, SAL*12 from emp;

重命名查询结果字段(as关键字可省略):

select ename, sal * 12 as yearsal from emp;

注意:中文名称要加引号(最好使用单引号,双引号仅MySQL支持):

select ename as '员工姓名',sal * 12 as '年薪' from emp;

*可用来查询全体,但效率太低,实际开发较少使用


(2)条件查询
select 字段,字段... from 表名 where 条件;
select ename from emp where sal = 5000;
select ename,sal from emp where sal >= 2000;

字段如果是字符串(varchar)那么条件中也要用单引号

找出工资在1100和3000之间的员工:

select ename,sal from emp where sal >= 1100 and sal <= 3000;
select ename,sal from emp where sal between 1100 and 3000;

注意between…and…是闭区间

查找值为null需要使用is nullis not null,不能使用= null

select ename,sal from emp where sal is null or sal = 0;

注意and优先级高于or,再使用复合条件时注意使用括号

inor类似,以下二者等价:

select ename,job from emp where job = 'SALESMAN' or job = 'MANAGER';
select ename,job from emp where job in('SALESMAN', 'MANAGER');

not in同理

like模糊查询
%代表任意多个字符,_代表任意1个字符:

/*找出名字当中含有O的*/
select ename from emp where ename like '%O%';
/*找出名字中第二个字母是A的*/
select ename from emp where ename like '_A%';
/*找出名字中有下划线的(要使用\转义)*/
select name from t_user where name like '%\_%';

(3)排序
select ename,sal from emp order by sal;

默认是升序,指定升降使用asc(升序)desc(降序)

select ename,sal from emp order by sal asc;
select ename,sal from emp order by sal desc;

/*按照工资的降序排列,当工资相同的时候再按照名字的升序排列。*/
select ename,sal from emp order by sal desc , ename asc;
select 字段 from 表名 where 条件 order by ....						

(4)单行处理函数

输入一行,输出一行

只要表达式中有NULL,最后结果就为NULL

解决方法:ifnull(可能为NULL的数据,被当做什么处理)

select ename,ifnull(comm,0) as comm from emp;

(5)分组函数

count 计数
sum 求和
avg 平均值
max 最大值
min 最小值

分组函数自动忽略NULL

分组函数不可直接使用在where子句当中,例如以下sql语句就会报错:

select ename,sal from emp where sal > avg(sal);

(6)分组查询

group by :按照某个字段或者某些字段进行分组
having :对分组之后的数据进行再次过滤

/*找出每个工作岗位的最高薪资*/
select max(sal),job from emp group by job;

分组函数一般都会和group by联合使用(分组函数必须分完组才能用),在group by语句执行结束之后执行。当一条sql语句没有group by的话,整张表的数据会自成一组(缺省group by)。group by是在where执行之后才会执行,所以where子句中的分组函数不能执行导致报错

解决方案:

select ename,sal from emp where sal > avg(sal);
/*修改为(子查询):*/
select ename,sal from emp where sal > (select avg(sal) from emp);

当一条语句中有group by的话,select后面只能跟分组函数和参与分组的字段,其它字段查询结果与分组查询并不匹配,无意义

多字段分组:

select deptno,job,max(sal) from emp group by deptno,job;

使用having或where过滤:

select max(sal),deptno from emp group by deptno having max(sal) > 2900; 
select deptno,max(sal) from emp where sal > 2900 group by deptno;

显然此处使用where后再分组效率高,在where无法解决时(如where中的条件使用分组函数)再考虑having


(7)执行顺序

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


四、MySQL常用指令

1.show databases;

2.create database 数据库名;

创建数据库

3.use 数据库名;

使用对应数据库

4.show tables;

查看当前使用数据库中的表

5.mysql> source sql脚本地址

初始化数据

6.drop database 数据库名;

删除数据库

7.desc 表名;

展示表结构

8.show create table 表名;

查看创建表的语句

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值