SQL基础数据库基础操作MYSQL数据库操作--创建库create database 库名;--创建库时判断库是否存在,不存在则创建create database if not exists 库名;--查看所有数据库show databases;--切换到指定的数据库use 库名;--查看当前数据库包含的表show tables;--查看数据库的结构定义信息show create database 库名;--删除数据库drop database 库名;--修改数据库的字符集为utf8alter database 库名 character set utf8;MYSQL数据库表操作--创建表create table 表名(字段1 类型1,字段2 类型2,...........);例:创建一个学生表,其中表字段create table student(  sno int,           #int 整数型  mno int,  sname varchar(10), #varchar字符串类型  sex bit,           #Bit称为位数据类型,其数据有两种取值:0和1,长度为1位。在输入0以外的其他值时,系统均把它们当1看待。这种数据类型常作为逻辑变量使用,用来表示真、假或是、否等二值选择。  grade decimal(5,2), #DECIMAL是MySQL中存在的精准数据类型,以字符串的形式保存精确的原始数值,而float,double则是非精准类型,在DB中保存的是近似值。在此示例中,grade列最多可以存储5位数字,小数位数为2位;  primary key(sno),   #primary key主键唯一  foreign key(mno) references B表(mno)    #外键需要关联另外一个表的主键;第一个mno是本表的,具体建表时看是否关联  )--查看表结构desc 表名;--查看创建表的SQL语句show create table 表名;--修改表名alter table 表名 rename to 新的表名;--修改字段名alter table 表名 rename column 字段名 to 新的字段名;--删除表drop table 表名;--删除表时判断表是否存在,若存在则删除drop table if exists 表名;--删除列ALTER TABLE 【表名】 DROP 【列名】--增加列ALTER TABLE 【表名】 ADD 【列名】 【类型】举例:alter table student add transactor varchar(10) not Null; --重命名列ALTER TABLE 【表名】 CHANGE 【列名】【新名】 --修改表字段alter table 表名 modify column 字段名 新的字段类型;alter table 表名称 change 字段名称 字段名称 字段类型 [是否允许非空];alter table 表名称 modify 字段名称 字段类型 [是否允许非空];--创建索引ALTER TABLE tbl_name ADD INDEX index_name (column list);--删除索引ALTER TABLE tbl_name DROP INDEX index_name (column list);添加用户create user '用户名'@'主机名' identified by '密码';删除用户drop user '用户名'@'主机名';权限管理查询权限show grants for '用户名'@'主机名';授予权限--语法grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';--授予faker用户所有权限,在任意数据库任意表上grant all on *.* to 'faker'@'localhost';撤销权限--语法revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';--撤销faker用户对test数据库中city数据表的权限revoke update on test.city from 'faker'@'localhost';增删改查-基本适用于sqlserver、mysql、oracle数据库INSERT-增insert插入单行数据语法:insert [into] <表名> [列名] values <列值>例:insert into Students (姓名,性别,出生日期) values ('张三','男','1983/6/15')注意:默认只有表名,将依次插入所有列例:insert into Students values ('张三','男','1983/6/15','null','null')insert,select语句将现有表中的 数据添加到已有的新表中语法:insert into <已有的新表> <列名> select <原表列名> from <原表名>例:insert into newstudent('张三','男','1983/6/15') select name,sex,birthday from strdent列:全部数据插入新表中 insert into newstudent from student注意:查询得到的数据个数、顺序、数据类型等,必须与插入的项保持一致DELETE-删DELETE 语句来删除表的一行或者多行数据语法: DELETE FROM <表名> [WHERE 子句] [ORDER BY 子句] [LIMIT 子句]<表名>:指定要删除数据的表名ORDER BY 子句:可选项。表示删除时,表中各行将按照子句中指定的顺序进行删除WHERE 子句:可选项。表示为删除操作限定删除条件,若省略该子句,则代表删除该表中的所有行LIMIT 子句:可选项。用于告知服务器在控制命令被返回到客户端前被删除行的最大值例: delete from student where grade ='' order by age limit 10   --删除学生表中某个年级下前10个年龄的学生注意: delete删除别的表有外键需要先将别的这个字段置为null例:B表中有外键num = 1;A表中这个外键num =1,删除B表外键报错,需将A表中的这个字段num置为空先 update A set num = NULL where num =1  再删除 delete B where num = 1#也可truncate使用删除truncate table 表名UPDATE-改用途:更新表中原有数据,set后面,更新字段值,既可以一次一项,也可以一次多项,使用where匹配字段语法: UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值       UPDATE 表名称 SET 列名称1 = 新值,列名称2 = 新值,列名称n = 新值 WHERE 条件与select联合使用update用来更新用select选择出的数据update 表名 set 字段名='值' select .....SELECT-查--查询表中所有数据select *from 表名;--查询表中年龄在某区间内的--方式1 between..and..select *from 表名 where age between 12 and 22;--方式2 &&select *from 表名 where age>=12 && age<=22;--方式3 andselect *from 表名 where age>=12 and age<=22;指定条件查询①单个条件(or / in)--查询表中年龄为2,12,22岁的记录--方式1 orselect *from 表名 where age=2 or age=12 or age=22;--方式2 inselect *from 表名 where age in(2,12,22);②多个条件(and)--查询users表中年龄为23,性别为女,名字为小楠的记录select *from users where age=23 and gender='女' and name='小楠'; --查询表中序号不为空的记录select *from 表名 where 表字段 is not null;--查询user表中序号为空的记录select *from 表名 where 表字段 is null;模糊查询(like)_:单个任意字符%:多个任意个字符--查询表中姓名第一个字为李的记录select *from 表名 where name like '李%';--查询表中姓名第二个字为李的记录select *from 表名 where name like '_李%';--查询表中姓名含有李字的记录select *from 表名 where name like '%李%';--查询表中姓名是两个字的记录select *from 表名 where name like '__';去除重复记录查询(distinct)--查询表中不相同的记录--select distinct 字段 from 表名;select distinct 表字段 from 表名;排序查询(order by)--查询表中记录,并以升序排序select *from 表名 order by 字段; --默认升序 --查询表中记录,并以降序排序select *from 表名 order by 字段 desc;   --desc降序--多个排序条件时,只有当第一个排序条件值一样,才会执行第二个排序条件,以此类推--查询users表中记录,并体育成绩降序,年龄降序select *from users order by PE desc,age desc;聚合函数(其中as后面将字段作为新的别名,方便区分)①计算和(sum)select sum(字段) (as sumvalue) from 表名;②计算最大值(max)select max(字段) (as maxvalue) from 表名;③计算最小值(min)select min(字段) (as minvalue) from 表名;④计算平均值(avg)select avg(字段) (as avgvalue) from 表名;⑤计算个数(count)select count(字段) (as totalcount) from 表名;分组查询(group by)select 字段 from 表名 where 条件 group by  字段或者select 字段 from 表名 group by 字段 having  过滤条件例:--查询users表中的记录,按照性别分组,分别查询男、女的体育成绩平均分,人数 要求:分数高于80分的人,分组之后,人数要大于2个人select gender,avg(PE),count(id) from users where PE > 80 group by gender having count(id)>2;分页查询(limit)注意:第一条记录的索引是0--查询表中的前10行条记录select *from 表名 limit 10;--查询表中第2~11条记录 (从第2条记录开始累加10条记录,查询结果是从第3行开始后的11条数据,即总数还是11条)select *from 表名 limit 1,10;子查询select *from 表1 where 表1字段 = (select 表2字段 from 表2 where 表2字段2='AA')   --表1字段和表2字段一样列:select *from studentinfowhere class = (select class from classinfo where className='A')相关子查询子级查询不能独立运行,要依赖主查询数据。select (select name from studentinfo where studentId=e.studentId),(select courseName from courseinfo where courseId = e.courseId),score from examinfo e将子级查询作为一个表查询select s.name,e.courseId,e.scorefrom studentInfo sjoin examinfo eon s.studentId =e.studentIdjoin (select courseId , max(score) max_score from examInfo group by courseId) as c on e.courseId = c.courseId and e.score = c.max_score内连接内连接查询的是两张表的并集,也就是A表和B表都必须有数据才能查询出来;三种查询方式(看自己熟悉习惯那种)-- joinselect * from A  join B on A.id = B.id -- inner joinselect * from A inner join B on A.id = B.id -- 逗号的连表方式就是内连接select * from A , B where A.id = B.id   左外连接和左连接左外连接和左连接是以左表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将左表所有的查询信息列出,而右表只列出ON后条件与左表满足的部分。左连接全称为左外连接,是外连接的一种。下面2个查询的结果是一样的-- left joinselect * from A left join B on  A.id = B.id -- left outer joinselect * from A left outer join B on  A.id = B.id 右外连接和右连接右外连接和右连接是以右表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将右表所有的查询信息列出,而左表只列出ON后条件与右表满足的部分。右连接全称为右外连接,是外连接的一种。下面2个查询的结果是一样的-- right joinselect * from A right join B on  A.id = B.id -- right outer joinselect * from A right outer join B on  A.id = B.id 全连接全连接显示两侧表中所有满足检索条件的行select * from a left join b on a.id = b.id union select * from a right join b on a.id = b.id1.内连接与外连接的区别是什么?内连接和外连接的区别:内连接:inner join(等值连接) 只返回两个表中联结字段相等的数据。外连接:返回包括左/右表中的所有记录和右/左表中联结字段相等的记录。2.左外连接和右外连接的区别是什么?左外连接和右外连接的区别:左外连接也称左连接。以左表为基表,在FROM子句中使用关键字“LEFT OUTER JOIN”或关键字“LEFT JOIN”来连接两张表。右外连接也称右连接。以右表为基表,在FROM子句中使用关键字“RIGHT OUTER JOIN”或关键字“RIGHT JOIN”来连接两张表。3.概括1.内连接就是取交集的部分。2.左连接就是左表全部的数据加上交集的数据。3.右连接就是右表全部的数据加上交集的数据。4.交叉连接就是数据全都要。视图从SQL的角度来看,视图就是一张表,存在表名、字段列视图和实体表的区别就在与:是否保存了实际数据。实体表中保存实际数据,使用实体表创建视图后,实体表中的数据发生变化,视图查询出的数据就会发生变化。从视图中读取数据时,视图会在内部执行对应的SELECT语句,并创建出一张临时表。视图的优点:简化用户操作1.将频繁使用的查询语句保存成视图,这样就不用每次都重新写。在创建好视图后,可以将视图和其他实体表一样,在SELECT语句中进行调用2.对于常用的联表查询,可将联表的结果创建为视图,后续使用联表结果时,不用重新写select语句,直接调用视图即可创建视图create view v_表名 as select * from 表名select * from v_表名视图数据增和改视图也可以使用INSERT,UPDATE进行数据的增和改,但是需要符合以下条件:(1)视图FROM子句只有一张表;(2)未使用GROUP BY子句,未使用HAVING子句视图新增和修改数据后,视图对应表中的数据同步修改删除视图drop view v_表名 
点赞 9
评论 1
全部评论

相关推荐

野猪不是猪🐗:我assume that你must技术aspect是solid的,temperament也挺good的,however面试不太serious,generally会feel style上不够sharp
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务