1、EXISTS关键字
与 IN 的区别
select * from student s where EXISTS(select stuid from score ss where ss.stuid = s.stuid)
select * from student s where s.stuid in(select stuid from score ss where ss.stuid = s.stuid)
2、mysql如何更新一个表中的某个字段值等于另一个表的某个字段值
update a inner join b
on a.bid=b.id
set a.x=b.x , a.y=b.y ;
3、复制所有的列或者只复制希望的列插入到新表中
SELECT column_name字段名
INTO newtable表名 [IN externaldb]
FROM table1表名
where 字段=值;
4、SQL语句 怎么把从一个表中查出来数据插入到另一个表中
INSERT INTO 表名(字段名)
select 字段名
from 表
例子: 将查询出的s表中sno,j表中jno,p表中pno插入spj表中
insert into spj(sno,jno,pno)
select sno,jno,pno
from s,j,p
5、MySQL 索引
CREATE INDEX indexName索引名 ON table_name表 (column_name,[…])字段 * 字段顺序按最佳左前缀法则
创建、删除、展示索引
CREATE index stateIndex on aqgly_order_detail(state,id,real_total_fee)
drop index stateIndex on aqgly_order_detail
show index from aqgly_order_detail
6、IGNORE关键字(翻译:忽视)
INSERT IGNORE INTO 会忽略数据库中已经存在的数据, 如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据。 这样就可以保留数据库中已经存在数据,达到在间隙中插入数据的目的。
SELECT COUNT(*) as repetitions, last_name, first_name
FROM person_tbl
GROUP BY last_name, first_name
HAVING repetitions > 1;
insert into user (id,username,userpwd,num)
values (1,"testName2","testPwd2",10)
ON DUPLICATE KEY UPDATE
username = VALUES(username),
userpwd = VALUES(userpwd)
8、查询表字段
select COLUMN_NAME from information_schema.COLUMNS
where table_name = '表名' and table_schema = '数据库名';
1、字符串函数
SELECT LEFT('runoob',2) -- ru
SELECT SUBSTRING("RUNOOB", 2, 3) AS ExtractString; -- UNO
2、数字函数
SELECT ROUND(12.3456,2) --12.35 四舍五入
SELECT TRUNCATE(1.23456,3) -- 1.234
3、日期函数
SELECT ADDDATE("2017-06-15", INTERVAL 10 DAY); -->2017-06-25
SELECT ADDDATE("2017-06-15", INTERVAL -1 year); -->2016-06-15
SELECT ADDDATE("2011-11-11 11:11:11", INTERVAL 20 MINUTE); -->2011-11-11 11:31:11
SELECT DATEDIFF('2001-02-02','2001-01-01') -> 32
SELECT CURDATE(); -- yyyy-MM-dd
SELECT CURTIME(); -- HH-mm-ss
SELECT NOW(); -- yyyy-MM-dd HH-mm-ss
SELECT DATE_FORMAT('2011-11-11 11:11:11','%Y-%m-%d %r') --> 2011-11-11 11:11:11 AM
SELECT year("2017-06-15"); -- 2017
SELECT month("2017-06-15"); -- 6
SELECT day("2017-06-15"); -- 15
SELECT LAST_DAY("2017-06-20"); --> 2017-06-30
SELECT SEC_TO_TIME(1206) --> 00:20:06
SELECT TIME_TO_SEC('18:30:10') --> 66610
SELECT DAYNAME('2011-11-11 11:11:11') -->Friday
SELECT DAYOFMONTH('2011-11-11 11:11:11') -->11
SELECT DAYOFWEEK('2011-11-11 11:11:11') --> 6
SELECT DAYOFYEAR('2011-11-11 11:11:11') --> 315
SELECT MAKEDATE(2017, 50); --> 2017-02-19
4、其他函数
CASE expression
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
WHEN conditionN THEN resultN
ELSE result
END
CASE 表示函数开始,END 表示函数结束。如果 condition1 成立,则返回 result1, 如果 condition2 成立,则返回 result2,当全部不成立则返回 result,而当有一个成立之后,后面的就不执行了。
SELECT CASE
WHEN 1 > 0
THEN '1 > 0'
WHEN 2 > 0
THEN '2 > 0'
ELSE '3 > 0'
END --> 1 > 0
SELECT IF(1 > 0,'正确','错误') -->正确
案例: 科目一到科目四的各自的数量
select
COUNT(*) as total,
COUNT(if(csr.keMu = 1 , 1 ,null)) as keMu1,
COUNT(if(csr.keMu = 2 , 1 ,null)) as keMu2,
COUNT(if(csr.keMu = 3 , 1 ,null)) as keMu3,
COUNT(if(csr.keMu = 4 , 1 ,null)) as keMu4
from cp_fenzhong_record cfr,cp_study_record csr
where csr.id = cfr.studyRecord_id and csr.student_id = 8
SELECT IFNULL(null,'Hello Word') -->Hello Word
mysql -u root -p
show databases;
show variables like 'character%'; -- :
character_set_client 为客户端编码方式;
character_set_connection 为建立连接使用的编码;
character_set_database 为数据库的编码;
character_set_results 为结果集的编码;
character_set_server 为数据库服务器的编码;
create table 表名(
字段1 字段1类型 [comment 字段1注释],
字段2 字段2类型 [comment 字段2注释],
字段3 字段3类型 [comment 字段3注释],
......
字段n 字段n类型 [comment 字段n注释]
)[comment 表注释];
-- 创建时间默认为当前时间, 修改时间默认为修改数据当前时间
CREATE TABLE `test` (
`text` varchar(255) DEFAULT '' COMMENT '内容',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 添加数据表字段
alter table 表名 add 字段名 类型(长度) [comment 字段注释] [约束]
alter table students add sex varchar(2) comment '性别'; # 在students数据表中添加sex字段
-- 修改数据表字段类型
ALTER TABLE TMP_TABLE MODIFY CUSNO CHAR(20)
alter table 表名 modify 字段名 字段新数据类型(长度);
alter table students modify upassword int(15); #修改students数据表中的upassword字段的字段类型为int
-- 修改字段名、字段类型
alter table 表名 change 旧字段名 新字段名 字段类型(长度) [comment 注释] [约束]
alter table students change upassword upwd int(30) comment '学生密码';
-- 修改数据表名
alter table 表名 rename to 新表名;
alter table students rename to students_table;
-- 删除数据表字段
alter table 表名 drop 字段名;
alter table students_table drop sex; #删除students_table数据表中的sex字段
-- 删除数据表
truncate table 表名; #删除指定表,并重新创建该表
truncate table students_table; #删除students_table数据表并重新创建该表
show tables; #查询当前数据库所有表
drop table [if exists] 表名; #删除数据表
drop table if exists stdenets_tables; #当students_tables数据表存在时删除
show tables; #查询当前数据库所有表
-- 删除索引
alter table op_customer drop index op_supplier;
-- 创建唯一索引
CREATE UNIQUE INDEX year_key_no ON op_customer (year,key_no);
Alter table 表名 add UNIQUE index 索引名 (字段1,字段2)
-- 普通索引
CREATE INDEX 索引名 ON 表名(字段1,字段2)
ALTER table 表名 ADD INDEX 索引名 ON (字段1,字段2)
-- 查看索引
show index from 数据库表名