summary:基础的创建、插入、搜索数据
注意事项: 1、大小写 2、, 有多项的时候最后一项后边没有, 。; 出现了;相当于语句执行完了,增加语句时要删除; 3、单双引号区别不大 4、起库名不能用中文 5、名字不要和关键字表名类名一致,尽量不要用着重号`` 6、Null不能做判断和运算 7、不等于: <> 、!=。等于:<=>、=。 -----库: 查看:show databases 创建:create database XXX 进入:use XXX 删除:drop database XXX 查询:select database() ----表: 1\\创建:create table XXX( stuno int(10) primary key auto_increment, stuname varchar(5), phone char(11) --创建表里的最后一行没有逗号 ) ---约束 -- primary key 约束主键,每个表只有一个(但可以有复合主键). 目的是不让这一列的元素数值重复且不允许有空值.相当于唯一约束+非空约束。 --unique 唯一约束,每个表可以有多个。 --not null 非空约束,指定字不能有空值 --default 缺省约束 如 not null default 0; --check 检查约束 如gender CHAR NOT NULL CHECK(gender IN('男','女')) --foreign key 外键约束(用的少) --- auto_increment 自增.不控制ID可以自己增 ---增加索引:create index stuid on stu(id); 2\\删除表:drop table XXX 3\\修改表:一般在插入数据之前进行 alter table 表1 [rename(重命名表)/add(给表增加一列,add后写元素)/drop(删除一列)/modify(修改元素的属性如int(10)-int(8))/change(更改列名)] 元素/表2 4\\查看:show tables (看这个库里有哪几张表), desc XXX(查看表的详细内容,每个项目的情况) 5\\插入数据: 1 insert into 表名(字段名...) values(值...) insert into student(id,name, sex, birth...) values(1001,"Dtt","MALE","2002-3-1"...) 2 insert into student value (1001,"Dtt","MALE","2002-3-1"...) 3 insert into student(id,name) value(1001, "dtt") 6\\修改数据: update 表名 set 字段名=字段值,字段名=字段值,......[where] 条件. update student set name ="ctt",sex = "female" where id=1001 update student set name ="ctt" 7\\删除数据: 一般不用,在公司里会有打包好的删除的系统 delete from student [where] 条件 delete from student where name="ctt" 8\!!\查询: 1 select *from student ,*查询所有内容 2 select 字段 from 表.[where] select name from student where id = 1001 ---多表连接查询:查询的结果可以视为一张表,用这张临时的表进行关联查询。 --最普通的 --内连接 from 表1 inner join 表2 on 关联条件 --外连接 outer join,等值连接id必须相同,如果没有id的话对不上就不会出现在表里 -left outer join 以左表为主表,将左表全部查出,右边对应查出. -right outer join 以右表为主表,将右表全部查出,左表对应查出. -full join MySQL 不支持,oracle 支持.MySql 可以用 left join union right join代替。 -union去除重复的只留不重复的;Union on 不去重复全都保存。 --where 和 on -where 条件,小范围查询可以这么些,多表联查的时候不宜维护、效率低。因为他是按条件过滤筛选,之后才出结果 -inner join .... on ....没有条件,比where快,他是直接根据条件出结果,不需要筛选 --自连接:相当于把同一张表是为两个表,给与不同的命名罢了。但是需要注意关联条件。如找员工的领导:on e.manager_id = m.employee_id --笛卡尔积(用的少) ---group by 关键字:不叫过滤,也没有去除重复,它只是把信息相同的内容放在了一个组里,之后就可以在组里进行聚合函数 ---having :和 group by 配合使用,他是分组之后进行过滤. 聚合函数,一般情况下和 group by 配合使用,不能作为条件使用. 聚合函数,不能和一般字段共同查询,可以和分组字段一起用 ----聚合函数 ---AVG(【DISTINCT】 expr) 返回expr的平均值 ---COUNT(【DISTINCT】 expr)返回expr的非NULL值的数目。count只是计数,不管条件如何都把这个记一下.如,每次只加一不能计算工资的总和,可以计算员工人数, ---MIN(【DISTINCT】 expr)返回expr的最小值 ---MAX(【DISTINCT】 expr)返回expr的最大值 ---SUM(【DISTINCT】 expr)返回expr的总和。是求和,把这一项全部数值加起来。如,sum能计算工资的总和也可以计算员工人数。 ---聚合函数不能当作条件使用,想用的话可以使用子查询。 ---聚合函数只能和分组字段在一起 eg:select first_name , job_id ,sum(salary) from employees;XXXXXX eg: department_id , avg(salary ) from employees group by department _id √ ---order by 关键字:asc正序\desc倒序。永远在sql语句的最后。 ---limit分段查询:limit ?1 ?2 . 从?1 的下一行开始(第一个? 表示 0---n),向后推进?2行 ---子查询:将查询结果当做另一个查询的条件. --多行子查询 eg:select * from employees where salary > (select max(salary) from employees where first_name = "John"); --多列子查询 eg:select * from employees where salary > (select min(salary) from employees where department_id = 60); 9\\去除重复:distinct select distinct job_id from employees 10\\别名as :as可以省略 ,给表或者字段重新取一个简单有特点的名字 11\\复制(了解)见word文档 12\\运算符:+ - * / % 13\\逻辑运算符:and or not 包含:1 in --查询 部门 是 50 ,60 , 70 的人的信息. select * from employees where department_id in (50,60,70); --不是 select * from employees where department_id not in (50,60,70); 2 between a and b --查询薪资不是大于50,小于100,必须是50号部门 select *from employees where (salary not between 50 and 100) and department_id = 50; 14\\模糊查找like:%--n个任意字符,_--1个任意字符 --名字有s的人 select *from student where name like '%s%'; --第三个字母是s的人 select *from student where name like '___s'; 15\\其他单行函数 ---数学函数 ---字符串函数 ---日期时间函数 ---流程函数: --IF(value,t ,f):如果value是真,返回t,否则返回f --IFNULL(value1, value2):如果value1不为空,返回value1,否则返回value2 --CASE (相当于Java的if...else if...) WHEN 条件1 THEN result1 WHEN 条件2 THEN result2 .... [ELSE resultn] END eg:SELECT ename ,CASE WHEN salary>=15000 THEN '高薪' WHEN salary>=10000 THEN '潜力股' WHEN salary>=8000 THEN '屌丝' --返回的都是单一字段 ELSE '草根' END FROM t_employee; --CASE expr (相当于Java的switch) WHEN 常量值1 THEN 值1 WHEN 常量值1 THEN 值1 .... [ELSE 值n] END eg:SELECT oid,`status`, CASE `status` WHEN 1 THEN '未付款' WHEN 2 THEN '已付款' WHEN 3 THEN '已发货' WHEN 4 THEN '确认收货' ELSE '无效订单' END FROM t_order; 16\!!\事务 ---事务执行的任务要么都执行成功,要么都失败,失败的话会一层一层回滚到最初的出发点 ---事务的ACID特性 --原子性(Atomicity):原子意为最小的粒子,或者说不能再分的事物。数据库事务的不可再分的原则即为原子性。 组成事务的所有SQL必须:要么全部执行,要么全部取消(就像上面的银行例子)。 一致性(Consistency):指数据的规则,在事务前/后应保持一致 隔离性(Isolation):简单点说,某个事务的操作对其他事务不可见的. 持久性(Durability):当事务提交完成后,其影响应该保留下来,不能撤消 ---用法 eg:#开启手动处理事务模式 #set autocommit = false; #开始事务(推荐) start transaction; #查看当前表的数据 select * from t_stu_detail; #删除整张表的数据 delete from t_stu_detail; #查询该表数据,发现显示删除后的结果 select * from t_stu_detail; #回滚,回滚到start transaction 后边一句的状态 rollback #查看当前表的数据,发现又回来了 select * from t_stu_detail; #删除整张表的数据 delete from t_stu_detail; #提交事务.一旦提交事务,就完全无法回滚 commit; #查看当前表的数据,发现真删除了 select * from t_stu_detail; 17\\数据库的隔离级别(了解、DBA工程师需要知道)