呵呵,数据库操作我转了——数据库操作指令

创建表:
CREATE TABLE tb_dept
(
  id INT PRIMARY KEY AUTO_INCREMENT,
  NAME VARCHAR(18),
 description VARCHAR(200) 
);
注:最后一个元素后不加逗号。
#建表最后建立约束(在表内建约束)
CREATE TABLE tb_emp
(
   id INT PRIMARY KEY AUTO_INCREMENT,
   NAME VARCHAR(18) NOT NULL,#非空约束
   sex VARCHAR(2),
   age INT ,
   address VARCHAR(200),
   email VARCHAR(100) UNIQUE ,#唯一约束
   dept_id INT,
   #constraint foreign key 外键名[表名+约束名](外键)references 主表(字段)
   CONSTRAINT FOREIGN KEY tb_emp_fk(dept_id) REFERENCES tb_dept(id)
);
INSERT INTO tb_emp(NAME,sex, age, address, email,dept_id)
VALUES('a','男',22,'dfdf','qwe@we.com',1);
#修改列类型:alter table 表名 modify 列名 列类型;
#增加列 alter table 表名 add 列名 列类型;
#删除列 alter table 表名 drop 列名;
#列改名 alter table 表名 change 旧列明 新列名 列类型
ALTER TABLE tb_dept CHANGE  dept_id  id INT ;
#更改表名 alter table 表名 rename 新表名
#在表外建立约束
CREATE TABLE tb_emp
(
   id INT PRIMARY KEY AUTO_INCREMENT,
   NAME VARCHAR(18) NOT NULL,#非空约束
   sex VARCHAR(2),
   age INT ,
   address VARCHAR(200),
   email VARCHAR(100) UNIQUE ,#唯一约束
   dept_id INT  
);
ALTER TABLE tb_emp
ADD CONSTRAINT FOREIGN KEY tb_emp_fk(dept_id) REFERENCES tb_dept(id);
     
#删除约束 修改非空约束 ALTER TABLE 表名 MODIFY 字段 字段类型
ALTER TABLE tb_emp MODIFY NAME VARCHAR(18)
#删除唯一约束   
ALTER TABLE tb_emp DROP INDEX email
#删除主键约束 注意自动增长不能删除
ALTER TABLE tb_emp MODIFY id INT
ALTER TABLE tb_emp DROP PRIMARY KEY  
#删除外键约束
ALTER TABLE tb_emp DROP FOREIGN KEY tb_emp_ibfk_1
INSERT INTO tb_emp(NAME,dept_id)
VALUES ('as',1);
INSERT INTO tb_emp(NAME,sex, age, address, email,dept_id)
VALUES('a','男',22,'dfdf','qwe@we.com',1);

#查询数据必须先插入tb_dept数据,因为tb_emp有外键约束
#insert into table [(column[,column....])]values (value[,value...]);
#1.指明字段进行插入,注意字段和值数量和类型都需匹配
INSERT INTO tb_dept(NAME, description)VALUES('开发部','负责软件开发工作');

#2.如果插入的values是所有字段,可以不必显示写插入的字段名,不推荐
INSERT INTO tb_dept(2,NAME, description)VALUES('开发部','负责软件开发工作');

#auto_increment会记住曾经生成的值
INSERT INTO tb_dept(NAME,description)VALUES('市场部','负责市场调研');

#3.一次插入多条记录
INSERT INTO tb_dept(NAME,description)
VALUES('财务部','负责财务工作'),
('市场部','负责市场调研'),
('采购部','负责采购工作');

#4.可以从一张表中插入数据
#创建一张表和tb_dept的结构一样,通过这种方式建表只是复制表结构,不复制约束
CREATE TABLE tb_dept2
SELECT *FROM tb_dept
#where id=99

INSERT INTO tb_dept2(id,NAME,description)
SELECT id,NAME,description FROM tb_dept

INSERT  INTO tb_emp(NAME,sex,age,address,email,dept_id)
VALUES('Sam','男',26,'ad','Sam@ads.com',1);

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

#更新update table set column=value[,column=value][wherecondition];
#where 后面建议使用主键或者唯一键,主键最好,因为与业务无关
UPDATE tb_emp SET age=23 WHERE id=1;
UPDATE tb_emp SET sex='女' WHERE id=1;
UPDATE 0FILE SET remarknum='3' WHERE id=1;
SELECT remarknum FROM 0FILE WHERE id=1

#删除 delete[from] table [where econdition]
DELETE FROM tb_emp;#删除表中所有数据
DELETE FROM tb_emp WHERE id=1;
DELETE FROM tb_emp WHERE NAME='Tom'
DELETE FROM USER WHERE username='wanglixue'
SELECT id FROM tb_emp WHERE username='Mary' 

#截断表,DDL语句,删除所有表数据
TRUNCATE TABLE tb_emp;
/*
1.delete删除数据,保留表结构,可以回滚,如果数据量大,很慢。回滚就是备份删除的数据。
2.truncate删除所有数据,保留表结构,不可以回滚,一次删除所有数据,速度相对很快
3.drop删除数据和表结构,删除速度最快
*/

#修改提交方式(1是自动提交,0是手动提交)
 SET autocommit=0;


#查询语句:select{*,column [alias],...}from table;
SELECT NAME,age,sex FROM tb_emp
SELECT * FROM tb_emp #*表示所有的列

#算术表达式
SELECT NAME,age,age+5
FROM tb_emp;

#null和0还有空字符串不是一个概念
SELECT *FROM tb_emp;
SELECT *FROM tb_emp WHERE NAME=0;
SELECT *FROM tb_emp WHERE NAME IS NULL;

#列的别名
SELECT NAME '姓名',sex'性别',age'年龄',address '地址',email'邮箱',dept_id'部门编号'
FROM tb_emp;

/*缺省情况下查询显示所有行,包括重复行*/
SELECT age FROM tb_emp;
 /*使用distinct关键字可从查询结果中清除重复行*/
SELECT DISTINCT age FROM tb_emp;

#distinct的作用范围是后面所有字段的组合
SELECT DISTINCT sex,age FROM tb_emp
WHERE age=26;

#使用where语句限定返回的记录
SELECT *FROM tb_emp
WHERE NAME='Lucy';

#比较运算符,使用between运算符显示某一值域范围的记录,包含最大值和最小值
SELECT * FROM tb_emp WHERE age BETWEEN 20 AND 25;

#使用in运算符获得匹配列表值得记录
SELECT * FROM tb_emp WHERE age IN (26);

/*使用like运算符执行模糊查询,查询条件可包含文字字符或数字
(%)可表示零或多个字符
(_)可表示一个字符
*/
SELECT * FROM tb_emp WHERE NAME LIKE'L%';

#and 需要所有条件都满足,or只要满足一个条件就行 not取反,可以通过()控制优先级别
SELECT *FROM tb_emp WHERE age>24 AND  NAME LIKE 'L%';
SELECT *FROM USER WHERE username='王丽雪' AND authority='1'

#排序 按照年龄从高到低排序
SELECT *FROM tb_emp ORDER BY age DESC;
#按照年龄从低到高排序
SELECT *FROM tb_emp ORDER BY age ASC;

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
函数
#concat(str1,str2...) 连接
SELECT CONCAT(NAME,address) FROM tb_emp;
#upper(str) 转为大写字母 lower(str)转换为小写字母
SELECT UPPER(NAME) FROM tb_emp WHERE age=26;
#返回字符串长度length(str)
SELECT LENGTH(NAME) FROM tb_emp WHERE age=23;
#substr(str,num,len)返回字符串str从num位置开始长度为len的字符串
SELECT SUBSTR(NAME,2,2) FROM tb_emp WHERE age=26;
#返回当前时间
SELECT NOW();
#查询入职时间是1981年2月
SELECT *FROM tb_emp
WHERE YEAR(hiredate)=1981 AND MONTH(hiredate)=2;
#插入时间
INSERT INTO tb_emp(NAME,job,hiredate,sal)
VALUES('周杰伦','天王','2011-12-14',10000);

INSERT INTO tb_emp(NAME,job,hiredate,sal)
VALUES('周杰伦','天王','2011-12-14',10000);

INSERT INTO tb_emp(NAME,job,hiredate,sal)
VALUES('蔡依林','小天后',NOW(),23345);

#ifnull(第一个值,第二个值)函数,如果字段不为空,则直接返回该值,如果为空,取第二个值
SELECT age,IFNULL(age,18)AS 年龄 FROM tb_emp;
#if函数,如果字段不为null,则取第二个值,如果为空,取第三个值
SELECT NAME,IF(age,19,18)AS 年龄 FROM tb_emp;
/*case
  when value then result
  else default
  end
  如果value是真,返回result,否则返回default
*/
/*case
  when value1 then result1
  when value2 then result2
  else default
  end
*/
SELECT NAME
CASE
WHEN age IS NULL THEN 18
ELSE age
END 
FROM tb_emp;

#聚合函数
SELECT AVG(age) FROM tb_emp  #平均数
SELECT SUM(age) FROM tb_emp  #和
SELECT MAX(age) FROM tb_emp  #最大值
SELECT MIN(age) FROM tb_emp  #最小值
SELECT COUNT(*) FROM tb_emp  #count不统计null,统计的是记录数

#分组统计
#每个部门的平均工资
SELECT deptno, AVG(sal) FROM tb_emp GROUP BY deptno
#每个部门的员工数
SELECT deptno, COUNT(*) FROM tb_emp GROUP BY deptno

/*
如果使用了分组函数,或者使用group by的查询,出现在select列表中的字段,要么出现在组合函数里,要么出现在group by子句中
group by子句的字段可以不出现在select列表中
*/

#分组后加条件使用having,where 和having都是来做条件限定的,但是having只能在group by之后。where是在分组之前进行条件查询,having是在分组之后进行条件查询的。
SELECT age,sex FROM tb_emp GROUP BY age HAVING age>18 ORDER BY age AS

#limit,常用来做分页
SELECT ... LIMIT offset_start ,ROW_COUNT;
offset_start:第一个返回记录行的偏移量,默认为零
ROW_COUNT:要返回记录行的最大数目
SELECT *FROM tb_emp LIMIT 3;#检索前三个记录
SELECT *FROM tb_emp LIMIT 3,4;#检索记录行4-7

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
子查询
#多表连接查询
#交叉连接
SELECT COUNT(*) FROM tb_emp;#7
SELECT COUNT(*) FROM tb_dept;#4
SELECT COUNT(*) FROM tb_emp,tb_dept;#28
#标准写法
SELECT COUNT(*) FROM tb_emp CROSS JOIN tb_dept;

#内连接 连接条件是主外键关联
SELECT COUNT(*)FROM tb_emp e,tb_dept d WHERE e.`dept_id`=d.`id`FROM
#标准写法
SELECT * FROM tb_dept INNER JOIN tb_emp
ON tb_dept.`id`=tb_emp.`dept_id`

#在外连接中,某些不满足条件的列也会显示出来,也就是说,只限制其中一个表的行,而不限制另一个表的行
#左外连接,左边的表做主表,左边的表记录全部显示,如果没有找到记录则补null
SELECT *FROM tb_dept LEFT JOIN tb_emp
ON tb_dept.`id`=tb_emp.`dept_id`
#右连接和左连接相反
SELECT *FROM tb_dept RIGHT JOIN tb_emp
ON tb_dept.`id`=tb_emp.`dept_id`



#子查询
SELECT *FROM tb_emp WHERE id=(SELECT id FROM tb_emp WHERE NAME='Lily')
#in 与列表中的任一成员相等(等于子查询的任意一个结果)
SELECT *FROM tb_emp WHERE age IN(SELECT age FROM tb_emp WHERE NAME='Tom')

SELECT PASSWORD FROM USER WHERE username=(SELECT username FROM USER WHERE authority='1')

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值