数据库:
1,保存数据的容器:
数据,集合--》内存中
文件---》硬件中
实现数据的持久化,使用完整的管理系统
DB:数据库,存储数据的仓库,他保存了一系列有组织的数据。
DBMS:数据库管理系统,数据库是通过DBMS创建和操作的容器
常见的数据库软件:mysql,oracle,db2,sqlsever。
sql:结构化查询语言,专门用来与数据库通信的语言。
SQL的优点:
1,几乎所有的DBMS也都支持SQL,不是特定的
2,简单易学。
3,一种强力的语言,灵活使用语言元素,可以进行非常复杂和高级的数据库操纵。
1,将数据放到表中,表再放在库中
2,一个数据库可以有多个表,每个表都有一个的名字,用来标识自己。表名具有唯一性
3,表具有一些特性,这些特性定义了数据在表中如何存储,类似java中的"类"的设计。
4,表由列组成,我们也称为字段,所有表都是由一个或者多个列组成,每一列类似java中的“属性”
Mysql数据库:属于MysqlAB公司
优点:成本低,开放源代码
DBMS:分为两类:
基于共享文件系统的DBMS(Access)
基于客户机--服务器的DBMS(Mysql,Oracle,SqlServer)
Mysql的启动和停止:
Mysql的常见命令:
在cmd中查看:
show databases; 显示数据库
use 指定库名
查询语言的学习:
mysql基础查询:
(1)select 查询列表 from 表名;
(2)查询列表可以是:表中的字段,常量值,表达式,函数
(3)查询的结果是一个虚拟的表格,临时表
(4)如何查询单个字段: select last_name from emp;
(5)查询表中的多个字段: select last_name,email,salary from emp;
(6)查询表中的所有字段:select * from emp; 字段顺序和表单数据一样。
(7)USE 库名;执行要运行的库
(8)着重号,用来区别关键字和字段名
(9)查询常量值:SELECT 100 ;select " john";
(10)查询表达式: SELECT 100*98;
(11)查询函数(方法):SELECT version();
(12)起别名:SELECT 100*98 AS 结果; SELECT last_name AS 姓,first_name AS 名 from emp;
(13) 便于理解 连接查询:在查询的时候有重名的时候,需要取别名来进行区分。
(14)方式一使用AS ,方式二使用空格
(15)查询salary 显示结果是 put out 别名尽量不要是关键字,特殊符号,若必要加上双引号。
(16)去重:DISTINCT 关键字
(17)+号的作用:java中,数值型中是运算符,字符串中是连接符,在sql中,仅仅就一个功能:运算符。
SELECT 100+90;直接进行数值运算。
SELECT ‘100’+90;其中一方是字符型,试图将字符型转换为数值型进行运算;
SELECT ‘john’+90; 转换失败,则将字符型数值转换为0;
SELECT null+100; 只要一方为null,则运算结果就是null;
查询员工名和姓,连接成一个字段, 并显示为姓名:
SELECT last_name+first_name AS 姓名 from emp;(这里运算结果是0)
SELECT CONCAT(last_name,first_name )AS 结果 from emp;
null和任何字符拼接都是null
基础练习:
(1)DESC 表名; 这是显示表的结构
(2)IFNULL 判断是否为空:IFNULL(表名,替换值);
mysql条件查询:
(1)语法: select 查询列表 from 表名 where 筛选条件;
(2)where 是在生成临时表之后的进行过滤的
(3)分类:
一,按条件表达式筛选,条件运算符:>, < ,= ,! =, <>(不等) >=,<=
二,按逻辑表达式筛选:逻辑运算符:and or not && || !
&&和and: 两个条件都是true,才为true;反之为false
|| 和or:只要有一个条件为true,结果就为true;反之为false
! 和not:如果连接的条件本身为false,结果为true,反之为false
三,模糊查询:like,between and [前开后关],in ,is null;
(4)按条件表达式筛选的案例
案例一:查询工资大于1200:
select * from emp where salary >=1200;
案例二:查询部门编号不等于90的员工名和部门编号:
select empname,deptno from emp where deptno <>90;(建立使用<>,也可以使用!=)
(5)按逻辑表达式筛选的案例
案例一:查询工资z在1000到2000之间的员工名,工资,奖金
select empname,salary,comm from emp where salary >1000 and salary <2000;
案例二:查询部门编号不是在90-110之间,或者工资高于1200的员工信息(in的用法)
select * from emp where not (deptno>=90 and deptno<=110) or salary>1200;
(6)按模糊查询的案例:
案例一:员工名中包含字符a的员工信息;(%代表通配符,like中必须要使用单引号,和通配符使用,%,代表任意多个字符,_ 下划线,任意单个字符)
select * from emp where empname like '%a%';
案例二:查询员工名中第三个字符为e,第五个字符为a 的员工名和工资
select empname ,salary from emp where empname like '___e_a%';
案例三:查询出员工名中第二个字符为_的员工名(转义符:\ )ESCAPE '$' 自定义一下转义符
select empname from emp where empname like '_\_%';
(7)按between and 进行查询的案例
案例一:查询员工编号在100到200之间的员工信息(不可以倒换数值顺序)
select * from emp where empno between 100 and 200;
(8)按 in 关键字 进行模糊查询 ( 使用in 提高了语句简洁度,in 列表的值必须一致或者兼容)
案例一:查询员工的工种编号是 IT,AD,VP中的一个员工名和工种编号 (不可以搭配%通配符)
select empname,job from emp where job in( IT,AD,VP);
(9)按 is null 进行查询的案例 (null是一个关键字) is not null(不为空)不用(= )判断null
案例一:查询没有奖金的员工名和奖金率
select empname , commission from emp where comm is null;
(10)安全等于 <=> 可以代替 is 可以判断不同类型的值 (可读性较差)
案例一:查询员工工资为1200的员工信息
select * from emp where salary <=> 1200;
练习:
(1)查询没有奖金,且工资小于1800的salary ,empname;
select salary , empname where comm is null and salary <1800;
(2)查询emp表中 job 不为‘IT’或者 工资为1200的员工信息;
select * from emp where job <> 'IT' or salary =1200;
(3)面试题:
select * from emp 和select * from emp where job like ‘%%’ and last_name like"%%"
结果一样吗?
不一样,如果判断的字段有null值。