韩顺平SQL_Server学习笔记

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

SQLServer学习资料表的管理---表名和列的命名表的管理---支持的数据类型表的管理----修改数据表的管理---删除数据删除全部数据Deletefrom表名;删除指定数据Deletefrom表名where字段名=‘值’and字段名=‘值’建表:表的基本查询----简单的查询语句使用where子句:或者写成:如何使用like操作符(模糊查询):在where条件中使用in:使用isnull的操作符:使用逻辑操作符号:使用orderby子句:Selectename,(sal+isnull(comm.,0))*13as年薪fromemporderby年薪表的复杂查询数据分组-max,min,avg,sum,count:Groupby和having子句:对数据分组的总结:1)分组函数只能出现在选择列表,having,orderby,子句中;2)如果在select语句中同时包含groupby,having,orderby,那么他们的顺序是groupby,having,orderby;3)在选择列中如果有列,表达式和分组函数,那么这些列和表达式必须有一个出现在groupby子句中,否则就会报错;如:selectdepot,avg(sal),max(sal)fromempgroupbydeptnohavingavg(sal)2000;这里deptno就一定要出现在groupby中;表的复杂查询----多表查询多表查询是指基于两个或两个以上表或是视图的查询或者:表的复杂查询----子查询1)(子查询)是指嵌入在其它sql语句中的select语句,也叫嵌套查询。2)(单行子查询)是指只返回一行数据的子查询语句3)(多行子查询)指返回多行数据的子查询在from子句中使用子查询请思考:如何显示高于部门平均工资的员工的姓名,薪水,她部门的平均工资和部门编号分析:1,首先要知道各个部门的平均工资Selectavg(sal),deptfromempgroupbydeptno2,把上面的查询结果,当做一个临时表对待这里需要说明的:当在from子句中使用子查询时,该子查询会被作为一个临时表对待,当在from子句中使用子查询时,必须给子查询指定别名。分页查询疯狂复制:插入数据:首先加入一条语句:然后再疯狂复制语句:用查询结果创建新表这个命令是一种快捷的建表方法。思考题:如何删除掉一张表重复记录建表:插入语句:(把此语句多复制几条);左外连接:右外连接:下面举个例子,直观一点。两张表。(如下表):表一:表二:维护数据的完整性--约束表一:表二:表三:表的管理----修改表数据库的备份和恢复用企业管理器完成对数据库的备份和恢复直观,同样我们也可以用查询分析器中完成类似的任务。---如:备份数据库aaa:Java程序操作SQLServerCred介绍:/***演示使用jdbc-odbc桥连接方式操作数据库spdb1(emp,dept)*1.配置数据源*2.在程序中去连接数据源*/packagecom.huangyaqing.jdbc;importjava.sql.*;publicclassTest1{publicstaticvoidmain(String[]args){Connectionct=null;Statementsm=null;try{//1.加载驱动(作用是把需要的驱动程序加入内存)Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);//2.得到连接(指定连接到哪个数据源,用户名和密码)//如果你配置数据源的时候,选择是windowsnt验证,则不需要“sa”,“shunping”//即Connection//ct=DriverManager.getConnection(jdbc:odbc:mytest);ct=DriverManager.getConnection(jdbc:odbc:mytest,sa,shunping);//3.创建Statement或者PreparedStatement[区别]//Statement用处是:主要用于发送sql语句.到数据源sm=ct.createStatement();//4.执行(crud,创建数据库,备份数据库,删除数据。。。。)//1.演示添加一条数据到dept表(删除,修改只需变的引号里面的内容)//executeUpdate可以执行cud操作,有一个返回改变多少数据库记录的值inti=sm.executeUpdate(insertintodeptvalues('50','保安部','china'))if(1==i){System.out.println(添加OK);}else{System.out.println(添加error);}//查询,显示所有的部门//ResultSet结果集,大家可以把ResultSet理解成一个表行的结果集ResultSetrs=sm.executeQuery(“select*fromdept”);//因为rs指向结果集的第一行的前一行//循环取出while(rs.next()){Intdeptno=rs.getInt(1);Stringdname=rs.getString(2);Stringloc=rs.getString(3);System.out.println(deptno+””+dname+””+loc);}}catch(Exceptione){e.printStackTrace();}finally{//关闭资源!!!!!!!!!//关闭顺序是,谁后创建,则先关闭try{//为了程序健壮if(sm!=null){sm.close();}if(ct!=null){ct.close();}}catch(SQLExceptione){e.printStackTrace();}}}}输出结果:以后要尽可能的用PreparedStatement/***PreparedStatement使用crud*1,可以提高执行效率(因为它有预编译的功能)*2,可以防止SQL注入,但是要求?赋值的方式可以*/packagecom.huangyaqing.jdbc;importjava.sql.*;publicclassTest2{publicstaticvoidmain(String[]args){//定义需要的对象PreparedStatementps=null;ResultSetrs=null;Connectionct=null;try{//1.加载驱动Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);//得到连接ct=DriverManager.getConnection(jdbc:odbc:mytest,sa,shunping);//3,创建psps=ct.prepareStatement(select*fromdept);/*ps=ct.prepareStatement(select*fromdeptwheredeptno=?andloc=?);*//给?号赋值*ps.setInt(1,50);//第一个问号赋值为20*/ps.setString(2,西永);//第二个问号为ddrs=ps.executeQuery();while(rs.next()){System.out.println(rs.getInt(1)++rs.getString(2)++rs.getString(3));}}catch(Exceptione){e.printStackTrace();}finally{//关闭资源!!!!!!!!!//关闭顺序是,谁后创建,则先关闭try{//为了程序健壮if(rs!=null){rs.close();}if(ps!=null){ps.close();}if(ct!=null){ct.close();}}catch(SQLExceptione){e.printStackTrace();}}}}输出结果:实际开发中,在java程序中:一个计算机最多的端口数目:65535个;1433表示sqlserver的默认端口,oracle:1521;ssh:22;tomcat:8080;mysql:3306;ftp:21/**JDBC方式去操作数据库*1.把java.sql.*;*2,需要引入三个jar包*3.特别说明,如果取值是按编号,则需要一一对应,如果是按照列名取值,则顺序灵活*/importjava.sql.*;publicclassTest3{publicstaticvoidmain(String[]args){//定义需要的对象PreparedStatementps=null;Connectionct=null;ResultSetrs=null;try{//初始化我们的对象//1.加载驱动Class.forName(com.microsoft.jdbc.SQLServerDriver);//2.得到连接//127.0.0.1表示你要连接的数据库的ip;1433表示sqlserver的默认端口,oracle:1521;ssh:22;tomcat:8080;mysql:3306;ftp:21ct=DriverManager.getConnection(jdbc:microsoft:sqlserver:+//127.0.0.1:1433;databaseName=spdb1,sa,shunping);//3.创建preparedStatementps=ct.prepareStatement(select*fromemp);//4.执行【如果是增加,删除,修改executeUpdata(),如果是查询executeQuery()】rs=ps.executeQuery();//循环的取出,雇员的名字,雇员的薪水,部门的标号while(rs.next()){Stringname=rs.getString(2);floatsal=rs.getFloat(6);intdeptno=rs.getInt(8);System.out.println(name++sal++deptno);}}catch(Exceptione){e.printStackTrace();}}}输出结果:作业评讲:1.找出早于12年前受雇的员工(日期函数:datadiff(datepart,startdate,enddate))select*fromempwheredatediff(year,hiredate,getdate())122.以首字母大写的方式显示所有的员工姓名Selectupper(substring(cname,1,1))+lower(substring(cname,2,len(cname)))fromemp//len()后面减不减1牵涉到字符串后面的/03.显示所有员工的姓名,用a替换所有“A”案例:Selectreplace(ename,’A’,’a’)fromemp;Selectename.datepart(year,hiredate)asy,datepart(month,hiredate)asmfromemporderbyy,m作业二:练习试题:

1 / 19
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功