mysql学习记录(附案例)

2019年12月08日

数据库---数据的存储和管理的设备

安装数据软件-----mysql/oracle/sqlserver.....

数据库结构------数据库
                 对象(表,视图,索引,过程,函数)
                 字段(列)
                 数据块
                 数据

数据类型:数值int double..
           字符varchar   char..
           日期date DATETIME  time..
开发模式           
c/s: 需要安装独立的客户端软件
b/s:  不需要安装客户端软件,浏览器

            sqlyog
人-------客户端软件------数据库mysql沟通   c/s
人----- 网页    ---------- 数据库
          (html)               (SQL)
                   (java)
                   
sql语言:
1.DDL(定义语言) 对数据库对象进行操作的语言(create alter. drop.)
              比如:  数据库  表   视图
              
2.DML(操作语言) 对数据库的数据进行操作(insert update. delete. select.)

3.DCL( 控制语言) 对象数据库的权限操作grant revoke.

4.TCL( 事务操作) 对数据库事务进行操作 commit.  rollback. 

#-------------------------对数据库
#创建数据库的语法
CREATE DATABASE 数据库名
#使用数据库
USE DATABASE 数据库名
#删除数据库
DROP DATABASE 数据库名

#-----------------------对表
#创建表
CREATE TABLE 表名(
  字段名  数据类型,
  字段名  数据类型,
  字段名  数据类型,
  ....
  字段名  数据类型
)
#删除表
DROP TABLE 表名

#修改表
#(1)添加字段tel
ALTER TABLE account ADD  tel VARCHAR(20)

#(2)删除字段tel
ALTER TABLE account DROP COLUMN tel

#(3)修改字段类型tel 的类型从varchar改为int
ALTER TABLE account MODIFY tel INT

#(4)修改字段名称tel的名称改为telephone
ALTER TABLE account CHANGE tel telephone INT

#---------------------------DML(对数据库数据进行操作的insert update delete select)
#插入数据
INSERT INTO  表名[(列名1,列名2,......)] VALUES(值1,值2.....)
 注意:后面的值要前面的列保持一致(个数,顺序,类型)


数值可以改变为文本    23----'23'   005----'5' 
文本不一定可以变为数值 '005'---5     '你好'---报错

varchar,char 数据表达  ''
INT, DOUBLE,FLOAT 数据表达  数字
DATE,DATETIME,TIME 表达  'yyyy-MM-dd HH:mm:ss'

#修改数据
UPDATE 表名 SET 列名=新值,列名=新值.......列名=新值 [WHERE 条件表达式]

#删除数据
DELETE FROM 表名 [WHERE  条件表达式]



#-------------------DDL (CREATE ALTER DROP)
#创建数据库
CREATE DATABASE kgc;

#在kgc数据下创建表account
#选中数据库的
USE kgc;
#创建表的
CREATE TABLE account(
  aid INT,
  aname VARCHAR(20),
  sex CHAR(2),
  birthday DATETIME,
  tel VARCHAR(20),
  cardnum VARCHAR(18)
);

#删除表
DROP TABLE account;

#删除数据库
DROP DATABASE kgc;


#--------------修改表alter table 表名 
#添加字段tel
ALTER TABLE account ADD  tel VARCHAR(20)

#删除字段tel
ALTER TABLE account DROP COLUMN tel

#修改字段类型tel 的类型从varchar改为int
ALTER TABLE account MODIFY tel INT

#修改字段名称tel的名称改为telephone
ALTER TABLE account CHANGE tel telephone INT



#---------------------向account表插入数据
INSERT INTO account(aid,aname,cardnum,sex) VALUES (1,2,3,4)
INSERT INTO account(aid,aname,cardnum,sex) VALUES ('你好','admin',3,4)
INSERT INTO account VALUES ('你好','admin',3,4),('你好','admin1',3,5)
-- 可以忽略列名不写,那么默认就是向表中所有列插入数据,顺序就是表中列的默认顺序,插入多组数据时中间用逗号隔开
INSERT INTO account VALUES(3,'lily','男',NULL,NULL,NULL)

#----------------------对account表中的数据进行修改
UPDATE account SET telephone='222'
UPDATE account SET telephone='333',birthday='1990-11-11'
#把用户表中admin用户的电话该为444,出生日期改为1997-12-11
UPDATE account SET telephone=444,birthday='1997-12-11' WHERE aname='admin'
UPDATE account SET telephone=555,birthday='1998-12-11' WHERE aname='admin' OR sex='男'

#------------------------删除account表中的数据
#删除id为0的用户
DELETE FROM account WHERE aid=0
DELETE FROM account

2019年12月09日

1.约束(有一定规范)(保证数据完整性,一致性,正确性,安全性)
   非空约束,not NULL 不能插入null空值
   唯一约束,UNIQUE  不允许插入重复数据
   主键约束,PRIMARY 不允许插入重复数据也不允许插入null
   默认约束,DEFAULT  如果没有插入值默认值为指定值
   外键约束,FOREIGN  插入的数据必须是来自于其他表的主键
   
   检查约束(mysql没有检查约束)
   
   枚举类型 ENUM()
   
  #sql语句添加约束
  #----创建表时添加约束
   CREATE TABLE account(
    aid INT PRIMARY KEY,
    aname VARCHAR(20) NOT NULL,
    sex ENUM('男','女'),
    birthday DATETIME DEFAULT '1990-12-11',
    cardnum VARCHAR(18),
    did INT ,
    UNIQUE(cardnum),
    FOREIGN KEY(did) REFERENCES depart(depno)
   )
   #references 表示参照的意思  
   # REFERENCES depart(depno) 即参照depart的depno列 depno必须是主键
   
   #---表已创建,添加约束
   CREATE TABLE account(
    aid INT ,
    aname VARCHAR(20) ,
    sex ENUM('男','女'),
    birthday DATETIME  ,
    cardnum VARCHAR(18),
    did INT
   )
   #---添加主键约束
   ALTER TABLE  account  ADD PRIMARY KEY(aid)
   #--添加非空约束
   ALTER TABLE account MODIFY aname VARCHAR(20) NOT NULL
   #--添加默认约束
   ALTER TABLE account MODIFY birthday DATETIME DEFAULT '1990-12-11'
   #--添加唯一约束
   ALTER TABLE account ADD UNIQUE(cardnum)
   #--添加外键约束
   ALTER TABLE account ADD FOREIGN KEY(did) REFERENCES depart(depno)
   

   
2.查询---对数据进行操作的语言insert(插入) update(修改) delete(删除)
查询关键是 SELECT 数据,数据....
SELECT '王五',89,'李四'    #查询语句的原理:select执行一次只会查询一行记录
                            #                select后面的数据个数是列数

 SELECT 数据,数据.... [FROM 数据集别名]
      #查询原理是,数据集有几行,select就执行几次
      #数据集的行数是查询行数, select后面的数据个数是列数

#查询部门表中所有信息
SELECT 1,'市场部',NULL;
SELECT 2,'行政部',NULL;
SELECT 3,'人事部',NULL;
SELECT 4,'财务部',NULL;
#------优化1
SELECT 'kk','mm' FROM depart
SELECT 1,'市场部',NULL FROM depart
#------优化2
SELECT depno,'市场部',NULL FROM depart
#------优化3
SELECT depno,depname,remark FROM depart

SELECT depno,depname,'王五' FROM depart

#-------查询员工表中所有记录
SELECT aid,aname,sex,birthday,cardnum,did,'人事部' FROM account

SELECT depname FROM depart WHERE depno=3

SELECT aid,aname,sex,birthday,cardnum,did,
(SELECT depname FROM depart WHERE depno=did)
 FROM account

#--取别名a.空格  b.as
SELECT aid 用户编号,aname AS 用户名称 FROM account
SELECT aid 用户编号,aname AS 用户名称 FROM account X

SELECT 用户编号,用户名称 FROM account  #报错
SELECT '用户编号','用户名称' FROM account 

SELECT 用户编号,用户名称 FROM 
(SELECT aid 用户编号,aname AS 用户名称 FROM account) X

#----*号代表是一行所有列
SELECT * FROM account

#---取几条记录的查询limit 起始下标(0开始),个数
SELECT * FROM depart LIMIT 2,2
SELECT * FROM depart LIMIT 1,3
-- 获取前3条记录
SELECT * FROM depart LIMIT 0,3
SELECT * FROM depart LIMIT 3

#--条件查询 select 数据,数据... [from 数据集别名 [where 条件表达式]]
/*
 比较: >  <  =  !=  < >  >= <=
 多条件:且(and)  或or
 范文查询: between ..and..  not between..and ..
 集合查询: in(数据,数据...) not in(数据,数据...)
 null查询: is null           is not null
 模糊查询: like 通配符_  %
*/

#查询部门编号为3的部门
SELECT * FROM depart WHERE  depno=3
#查询部门编号大于3的部门
SELECT * FROM depart WHERE depno>3
#查询部门编号大于等于3 且 小于等于7的部门
SELECT * FROM depart WHERE depno>=3 AND depno<=7
SELECT * FROM depart WHERE depno BETWEEN 3 AND 7
#查询部门编号是3,2,8的部门
SELECT * FROM depart WHERE depno=2 OR depno=3 OR depno=8
SELECT * FROM depart WHERE depno IN(2,3,8)
SELECT * FROM depart WHERE depno NOT IN(2,3,8)

2019年12月11日

SELECT aid,sex,'5层4教' FROM account 

SELECT 用户编号,aname FROM account 

SELECT 用户编号,aname FROM (SELECT aid 用户编号,* FROM account)a

SELECT aid,aname FROM (SELECT aid 用户编号,* FROM account)a WHERE aid=1

---SELECT 数据,数据....[FROM 数据集名 [WHERE 条件表达式]]
SELECT '王五',aid FROM account

#条件表达式
#比较> < >= <= != =
#范围between..and..  not between..and..
#集合in(数据,数据...) not in(数据,数据...)
#多条件 and(且)   or(或者)
#null值查询
#模糊查询 like  通配符%(任意长度任意字符) _(一个任意字符)

#查询性别是男性的员工
SELECT * FROM account WHERE sex='男'
#查询编号大于2的员工
SELECT * FROM account WHERE aid>2
#查询性别是男性或者编号>2的员工
SELECT * FROM account WHERE sex='男' OR aid>2
#查询部门编号是1,3的员工信息
SELECT * FROM account WHERE did=1 OR did=3
SELECT * FROM account WHERE did IN(1,3)

#查询性别是女性而且部门是2的员工
SELECT * FROM account WHERE sex='女' AND did=2

#查询有身份证号的员工
SELECT * FROM account WHERE cardnum IS NOT NULL
SELECT * FROM account WHERE cardnum!=NULL #查询不出结果
#查询姓名为空字符的员工
SELECT * FROM account WHERE aname=''
SELECT * FROM account WHERE aname IS NULL

#查询姓名有y的员工
SELECT * FROM account WHERE aname = '%y%'
#查询姓l的员工
SELECT * FROM account WHERE aname LIKE 'l%'

#取别名as或者空格      取记录limit 起始下标,个数  #去重复distinct
#查询所有员工的名称和部门编号
SELECT DISTINCT aname,did FROM account

SELECT DISTINCT did FROM account


#---聚和函数查询sum(数据)求和  max()求最大值 min()求最小值 count()求个数 avg()求平均数
#查询所有人的年龄
SELECT age FROM account

#查询所有人的年龄之和
SELECT SUM(age) FROM account
SELECT COUNT(age) FROM account
#查询平均年龄
SELECT SUM(age)/COUNT(age) FROM account
SELECT AVG(age) FROM account
SELECT MAX(age) FROM account
SELECT MIN(age) FROM account

SELECT aname,age FROM account
SELECT aname, SUM(age) FROM account   #不允许聚合行数和其他列名一起使用,除非用了分组查询

#---分组查询(分组后的条件查询)group by 列名,列名...[having 条件表达式]
#查询员工总人
SELECT COUNT(*) FROM account
#查询每个部门下的人数
SELECT * FROM account GROUP  BY did   #语法是错误的

SELECT did,COUNT(*) FROM account GROUP BY did
#查询每个部门下的人数,最大年龄,最小年龄
SELECT did,COUNT(*),MAX(age),MIN(age) FROM account GROUP BY did

#查询每个部门人数在2人及以上的部门
SELECT did,COUNT(*) FROM account GROUP BY did HAVING COUNT(*)>=2

#--排序order by 【asc(升序)默认  desc降序】
SELECT * FROM account ORDER BY did DESC,age ASC

# select 数据,数据 ... from 数据集名称  [where 条件 group by 列名 having 条件 order by 列名,列名...]


#多表查询---多张表整合成1张表
#查询的员工7个数据+部门的3个数据  (笛卡儿积查询)
SELECT account.*,depart.* FROM account,depart
SELECT account.*,depart.* FROM account,depart WHERE account.did=depart.depno

#联合查询union  ,行合,考虑列对称(以第一条查询语句列数为主,列数一致,类型兼容)
SELECT aid,aname ,sex FROM account         #16行
UNION
SELECT depno,depname,NULL FROM depart      //21行


#连接查询join   ,列合,考虑行对称
#笛卡儿集cross join
SELECT account.*,depart.* FROM account  CROSS JOIN  depart
#左外连接
SELECT account.*,depart.* FROM account  LEFT JOIN  depart ON account.did=depart.depno
#右外连接
SELECT account.*,depart.* FROM account  RIGHT JOIN  depart ON account.did=depart.depno
#内连接  inner join
SELECT account.*,depart.* FROM account  INNER JOIN  depart ON account.did=depart.depno  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值