数据库基础

1.1 登录MYSQL:

  @>mysql -u root -p

  @>密码

  1.2 创建用户:
    格式:grant select on 数据库.* to 用户名@登录主机 identified by '密码'
  举例:
    例 1:增加一个用户 test1 密码为 abc,让他可以在任何主机上登录,并对所有数据库有
    查询、插入、修改、删除的权限。首先用以 root 用户连入 MySQL,然后键入以下命令:
      grant select,insert,update,delete on *.* to root@localhost identified by 'mysql';
    或者
      grant all privileges on *.* to root@localhost identified by 'mysql';
    然后刷新权限设置。
      flush privileges;

    例 2:如果你不想 root 有密码操作数据库“mydb”里的数据表,可以再打一个命令将密码消掉。
      grant select,insert,update,delete on mydb.* to root@localhost identified by '';
 
  #注意:此处的"localhost",是指该用户只能在本地登录,不能在另外一台机器上远程登录。
  如果想远程登录的话,将"localhost"改为"%",
  表示在任何一台电脑上都可以登录。也可以指定某台机器可以远程登录。

库概念:长期存储在计算机内、有组织的、可共享的、统一管理的相关数据的集合。

表概念:表是数据存储的最常见和最简单的形式,是构成关系型数据库的基本元素。

什么时候建立索引:1 经常用来查询的字段,模糊查询的字段不用, 其他精确查询且字段重复率低的最好需要.比如 varchar字段

                                 2 一个表经常用这个字段进行条件查询,而且值是各式各样的,内容不是唯一的几个值,比如 varchar(100)                                         里面的值重复很少,而且查询不是以like()进行,那么可以考虑加一加。

                                3  字段内容不是频繁变化.

增删改查、连接、聚合:

1 用一条SQL 语句 查询出每门课都大于80 分的学生姓名

name   kecheng   fenshu
张三    语文       81
张三     数学       75
李四     语文       76
李四     数学       90
王五     语文       81
王五     数学       100
王五     英语       90

select distinct name from table where name not in (select distinct name from table where fenshu<=80)

select name from table group by name having min(fenshu)>80

2 学生表 如下

自动编号   学号   姓名  课程编号 课程名称 分数
1        2005001    张三   0001      数学        69
2        2005002    李四    0001      数学        89
3        2005001    张三   0001      数学        69
删除除了自动编号不同, 其他都相同的学生冗余信息
delete tablename where 自动编号 not in(select min( 自动编号) from tablename group by学号, 姓名, 课程编号, 课程名称, 分数)

3 一个叫 team 的表,里面只有一个字段name, 一共有4 条纪录,分别是a,b,c,d, 对应四个球对,现在四个球对进行比赛,用一条sql 语句显示所有可能的比赛组合.
你先按你自己的想法做一下,看结果有我的这个简单吗?

答:select a.name, b.name
from team a, team b 
where a.name < b.name

4 怎么把这样一个表
year   month amount
1991   1     1.1
1991   2     1.2
1991   3     1.3
1991   4     1.4
1992   1     2.1
1992   2     2.2
1992   3     2.3
1992   4     2.4
查成这样一个结果
year m1   m2   m3   m4
1991 1.1 1.2 1.3 1.4
1992 2.1 2.2 2.3 2.4 

select year, 
(select amount from   aaa m where month=1   and m.year=aaa.year) as m1,
(select amount from   aaa m where month=2   and m.year=aaa.year) as m2,
(select amount from   aaa m where month=3   and m.year=aaa.year) as m3,
(select amount from   aaa m where month=4   and m.year=aaa.year) as m4
from aaa   group by year

5 原表:                                               
courseid coursename score
-------------------------------------
Java 70
2 oracle 90
3 xml 40
4 jsp 30
5 servlet 80

courseid coursename score mark
---------------------------------------------------
1 Java 70 pass
2 oracle 90 pass
3 xml 40 fail
4 jsp 30 fail
5 servlet 80 pass
写出此查询:select courseid, coursename ,score ,decode(sign(score-60),-1,'fail','pass') as mark from course

6 常用聚合函数:

count()  sum()   avg()   max()  min()  

group by           group by  having 

SQL的执行顺序: from -->where-->group by-->select-->having-->order by

7 连接:

  • INNER JOIN:如果表中有至少一个匹配,则返回行
  • LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
  • FULL JOIN:只要其中一个表中存在匹配,则返回行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值