1.数据保存

    数据保存在内存:

               优点: 存取速度快

               缺点: 数据不能永远保存

 

         数据保存在文件:

               优点: 数据永远保存

               缺点:

                          1)速度比内存操作慢,频繁的IO操作

                          2)查询数据不方便

 

         数据保存在软件:

                         1)数据永远保存

                         2)速度比较快

                         3)查询和管理数据方便

2.常见数据库软件

         SQLServer 微软的产品。与net平台兼容比较好。(收费

         Oracle:甲骨文公司的产品。 java平台兼容性最好。(收费

                        收购Sun公司: java

                        收购mysql: mysql 数据库软件

                                      中大型企业(中大型应用)

                        mysql 开源产品。免费的。与java平台兼容性最好。

                                        中小企业(中小应用)

3.数据库的操作

            创建库,day16

                   CREATE DATABASE day16 DEFAULT CHARACTER SET utf8;

           使用day16这个数据库

                   USE day16;

            查询day16这个库中的所有的表

                   SHOW TABLES;

           创建学生表(id,name,age)

                    CREATE TABLE student(

                    id INT,

                   NAME VARCHAR(20),

                   age INT

                   );

            查询表中的数据

                   SELECT * FROM student;

            查询一个表结构

                   DESC student;

            删除student表

                   DROP TABLE student;

           添加一个地址字段(gender varchar(2))

                   ALTER TABLE student ADD COLUMN gender VARCHAR(2);


           修改gender字段类型为varchar(3)

                   ALTER TABLE student MODIFY COLUMN gender VARCHAR(3);


          将gender字段修改为sex字段 varchar(2)

                   ALTER TABLE student CHANGE COLUMN gender sex VARCHAR(2);


          添加一个地址字段

                  ALTER TABLE student ADD COLUMN address VARCHAR(20);


          删除sex和address字段

                 ALTER TABLE student DROP COLUMN sex,DROP COLUMN address;


         将student这个表的表名改为stu

                ALTER TABLE stu RENAME TO student;

         查看表数据

                SELECT * FROM student;


         给表中插入3条数据(插入所有字段)

                INSERT INTO student VALUES(1,'张三',20,'山西');

                INSERT INTO student VALUES(2,'李四',22,'山西');

                INSERT INTO student VALUES(3,'王五',21,'河北');

    

         给表中插入id字段和name字段

                INSERT INTO student(id,NAME) VALUES(4,'赵六');


         将所有学生的年龄改为30岁,修改所有学生的年龄

                UPDATE student SET age=30;


        将id为3的学生姓名改为房祖名

                UPDATE student SET NAME='张飞' WHERE id=3;


        删除全表数据,本质上是一条一条进行删除的,效率比较慢

                DELETE FROM student;


        删除id为3的数据

                DELETE FROM student WHERE id=3;


        使用truncate table 表名,删除全表数据,直接将全表数据删除,效率比较快

                TRUNCATE TABLE student;


        查询所有列

               SELECT * FROM student;


        查询指定字段,查询id,name

               SELECT id,NAME FROM student;


        查询时指定别名,name--姓名,address--住址

               SELECT NAME AS '姓名',address AS '住址' FROM student;

         添加servlet,jsp字段

               ALTER TABLE student ADD COLUMN servlet INT,ADD COLUMN jsp INT;


         给每条学生数据添加上servlet和jsp的成绩

                UPDATE student SET servlet=50,jsp=60 WHERE id=1;

                UPDATE student SET servlet=60,jsp=70 WHERE id=2;

                UPDATE student SET servlet=70,jsp=80 WHERE id=3;

                

         合并servlet和jsp这两个列进行查询,查询每个学生的servlet和jsp的成绩总和

                SELECT NAME '姓名',(servlet+jsp) '总成绩' FROM student;


         查询你们班的学生都来自于哪里

                SELECT NAME '姓名',address '地址' FROM student;


         去除重复值的另一种写法

                SELECT DISTINCT(address) FROM student;



         查询id为1并且,并且servlet成绩等于50的学生(交集 and)

                SELECT * FROM student WHERE id=1 AND servlet=50;


         查询id为1或者来自中国香港的学生(并集 or)

                SELECT * FROM student WHERE id=1 OR address='中国香港';


         查询servlet成绩大于60分的学生

                SELECT * FROM student WHERE servlet>60;


         查询jsp成绩小于等于70的学生

                SELECT * FROM student WHERE jsp<=70;

         另一种写法

                SELECT * FROM student WHERE jsp<70 OR jsp=70;


        上面写法的另一种语法,between...and...包前也包后

                SELECT * FROM student WHERE jsp BETWEEN 70 AND 80;


         查询学生年龄不等于30岁的学生

                 SELECT * FROM student WHERE age<>30;


        模糊查询(like),like后面跟的是符号

         %任意多个字符

          _一个字符


        查询姓刘的学生(like '张%')

                SELECT * FROM student WHERE NAME LIKE '张%';



        聚合函数

        查询servlet的总成绩(sum -- 求和函数)

                SELECT SUM(servlet) FROM student;


        查询每个学生的servlet平均分(avg,平均函数)

                SELECT AVG(servlet) FROM student;


        查询学生的servlet的最高成绩(max ,最大值函数)

                SELECT MAX(servlet) FROM student;



        求取这张学生表中有多少条数据(count(*))

        效率比较低

                SELECT COUNT(*) FROM student;


        根据某一个字段求取学生表中的数据条数,当一个字段数值为null的时候,是不予计算的

        但是这种方式求取得统计值的时候效率会更高,但是有时候数据不够准确

                SELECT COUNT(age) FROM student



        查询人数大于1的地域(group by 分组字段 having 筛选条件) 

                SELECT address,COUNT(*) FROM student GROUP BY address HAVING COUNT(*)>1;


        student表中目前有4条数据,分为2页显示,每页显示2条

        查询第一页的显示数据:

                SELECT * FROM student LIMIT 0,2;

        查询第二页现实的数据

                SELECT * FROM student LIMIT 2,2;


        按照id字段的升序进行排序

        asc,升序,数字从小到大,字母a-z

        desc,降序,数字从大到小,字母z-a

                SELECT * FROM student ORDER BY id DESC;


        按照servlet的成绩的降序进行排序

                SELECT * FROM student ORDER BY servlet DESC;


        先按照学生的年龄升序进行排序,年龄相同按照学生的servelt成绩的升序进行排序

                SELECT * FROM student ORDER BY age ASC,servlet ASC;