本人本科通信专业,除了有一些C/C++的语法基础以外,从未系统学习过计算机专业的课程。虽有满腹EE知识,却无半点CS知识,因此对于即将来临的各种面试笔试感到焦虑。不过种一棵树最好的时间是十年前,其次就是现在。只要肯学,一切也都来得及。今日起将在CSDN上更新我的计算机知识学习过程,会同时复习C++、学习MySQL、做剑指offer的题目。如果总结的知识点有错误,欢迎指正。也欢迎各种小白或者大佬前来讨论,共同进步。
一、基础常识
数据库(Database),简称DB,是一种按照一定格式存储数据的文件的组合。
数据库管理系统(DBMS),是用于管理数据库中的数据的。DBMS 可以对DB 中的数据进行增删改查。常见的DBMS有:MySQL、Oracle、SQLserver、DB2、sybase等等。
SQL是一种结构化查询语言,程序员可以编写SQL语句,然后DBMS将执行SQL语句,最终完成对数据库的数据管理。
数据库最基本的单元是表:table
表中的行(row)被称为数据、列(column)被称为字段
二、SQL语句分类:
DQL:数据查询语言(带select的都是)(最常用)
select xxx
DML:数据操作语言(对表中数据增删改的都是DML)
insert增 delete删 update改
DDL:数据定义语言(对表的结构作更改,而非DML中的数据)
create新建 alter修改 drop删除
TCL:是事务控制语言
commit事务提交 rollback事务回滚
DCL:数据控制语言
grant授权 revoke撤销权限
三、MySQL常用命令总结
/*以下命令不分大小写,且不见分号不执行*/
在mysql.exe所在目录下,mysql -rootu -p1234 //登陆Mysql(显示密码1234)
mysql -rootu -p//登陆Mysql(不显示密码1234)
show databases; //显示mysql里数据有文件
use xxxx;//使用mysql中某个数据库
create database xxxxx;//创建数据库
exit //退出MySQL
show tables;//用在use xxx之后,用于看这个数据库有哪些表
source后面加英文路径的sql文件,不要有空格,也无分号//导入sql文件
select*from 表名;//看表中的数据,*表示所有
desc 表名;//只看表的结构,desc为describe的简写
select version();//查看MySQL版本
select database();//查看当前使用的数据库
四、简单查询语句
1.查询一个字段
select 字段名 from 表名; //查询一个字段(列)
如下图中使用select LOC from dept;可从dept表里查询到LOC字段的信息
2.查询两个字段或者多个字段
使用逗号隔开即可
select 字段名1,字段名2 from 表名;
如下图中使用select DNAME,LOC from dept;可从dept表里查询到DNAME和LOC字段的信息
3.查询所有字段
第一种方式:可以把所有字段都加上,即select a,b,c,d,e,f... from tablename;
第二种方式:可以用*代表所有字段,即select * from dept;,但这种方式缺点是效率低,*在程序中会先转换成字段,这也会占用内存,因此实际开发中不建议使用,可在DOS命令窗口里使用。
4.给查询的列起别名
用as关键字起别名。
如下图所示,select 字段名 as 新字段名 from 表名;
/*select不会进行修改操作,因此只是显示的查询结果列名变了,但原表名不变*/
/*例子中后面的Dname as deptname是一个整体,查询deptno与改成deptname的dname这两个字段,不要误会。若deptno要改别名,那也加一个as+别名即可,即select A as B,C as D from tablename; */
as也可以省略,写成select deptno,dname deptname from dept;//as变为空格,但不可变成逗号
若改的别名有逗号或者空格或是中文,那就用单引号括起来即可。MySQL中也可以用双引号括起来,但是Oracle中不允许双引号。而单引号可以用在一切SQL语句中。
5.对列进行数学运算
由下图可知,字段可以使用数学表达式。
五、条件查询
条件查询即不是将表中所有数据都查出来。是查询出来符合条件的。
select 字段1,字段2,字段3... from 表名 where 条件;
条件包括逻辑运算符(and、or、not)、比较运算符(=、!=、>、<)、between...and...、is (not) null、模糊查询(like)、in(后面有举例)等。注意,SQL语句中,不等号!=也可以写成<>,因为又大于又小于,肯定不等。
举例1: select empno,ename from emp where sal=3000;//查询薪资为3000的员工的姓名和编号
举例2: select empno,ename from emp where sal<=2000;//查询薪资小于等于2000的员工的姓名和编号
举例3:select empno,sal from emp where ename='smith';//名字叫smith的员工的编号和薪资
举例4:select empno,ename from emp where sal between 2450 and 3000;
/*查询薪资在2450到3000的员工的编号和名字*/
/*注意,between...and...必须遵循左小右大,且这个语句是闭区间,包括两端值*/
/*本例也可使用select empno,ename from emp where sal>=2450 and <= 3000;*/
举例5:select empno,ename,sal,comm from emp where comm is null;
/*查询补贴为NULL的员工的编号、姓名、薪资*/
/*查询补贴不为NULL的员工的编号、姓名、薪资则可用 is not null */
/*SQL中NULL不可以用等号进行衡量,不可以用=NULL,需要使用is NULL */
举例6(不运行了,主要为了阐述in的用法):
select empno from emp where job='MANAGER' or job='SALESMAN';
select empno from emp where job in ('MANAGER','SALESMAN');
上面两条是等价的,in相当于很多个 or,当然也有not in,表示不在这几个值当中的数据。
/*注意:A in(800,5000)不是区间,都找出来。而是A=800 or A=5000;
区间可以用between...and...*/
条件查询中有一个很重要的查询方式叫做模糊查询,使用like配合下划线_或者百分号%
下划线表示任意一个字符,而百分号表示任意多个字符。
比如:
查询出表emp里面找出名字(ename)里有O的人的名字
select ename from emp where ename like '%O%'; //%表示任意多个字符
查询出表emp里面找出名字(ename)里末尾为T的人的名字
select ename from emp where ename like '%T';
查询出表emp里面找出名字(ename)里开头为K的人的名字
select ename from emp where ename like 'K%';
查询出表emp里面找出名字(ename)里第二个字母为A的人的名字
select ename from emp where ename like '_A%';
查询出表emp里面找出名字(ename)里第三个字母为R的人的名字
select ename from emp where ename like '__R%';
查询出表emp里面找出名字(ename)里名字有下划线的的人的名字
此时如果直接用'%_%'则全查询出来了,因此要用到转义符\
select ename from emp where ename like '%\_%';
这一点在多种语言里都是通用的,为了防止特殊语义的符号被使用后误解。
六、排序
默认为升序:如果要查询表emp中所有员工薪资(sal)并排序,则使用
select ename,sal from emp order by sal;//默认升序,如下图
指定降序:select ename,sal from emp order by sal desc;//desc即descend简写,效果如下图
指定升序:select ename,sal from emp order by sal asc;//asc为ascend简写,效果如下图
多个字段排序
比如查询员工薪资和名字,薪资升序,若薪资一样,按照名字升序(即首字母,直接写电脑可以理解)
则可以用select ename,sal from emp order by sal asc,ename asc;
//SQL语句中排序order后面逗号前面是主导,一样才看逗号后面那个
效果如下:
如果有综合查询,那么先from,再where,再order,排序总是在最后的
比如select ename,sal from emp where sal between 1250 and 3000 order by sal desc;
//该语句找出emp中工资在1250到3000之间的员工信息,要求按照薪资降序排列
七、函数
- 数据处理函数
数据处理函数又叫单行处理函数,它的特点是一个输入对应一个输出,故为单行处理函数。相应的还有多行处理函数它的特点是多个输入,对应一个输出,比如求和函数sum()。
常见的单行处理函数:
lower转换小写: select lower(ename) as ename from emp;//要看ename为表头的小写ename字段
upper转换大写:select upper(ename) as ename from emp;